为算数表达式构造上下文无关文法

发布于 2022-09-29 13:21:08 字数 152 浏览 14 评论 0

一个算数表达式,由整数、小数、标识符、括号、加减乘除号(+ - * /)、求模号(%)、乘方号^以及正负号(+、-)组成。要为这种算数表达式构造无二义的上下文无关文法,该怎么做?

以下是这种算数表达式的一个例子

(-b+(b^2)-4*a*c)/2*a

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

温柔女人霸气范 2022-10-06 13:21:08

未明白楼主意思

不必你懂 2022-10-06 13:21:08

原帖由 mik 于 2007-6-9 21:36 发表于 2楼  
未明白楼主意思

以龙书2.9节的翻译器为例,它把中缀表达式翻译成后缀形式。但它只支持包含数字、标识符、和+、-、*、/、div、mod这几种操作符。其文法如下:
start-> list eof
list->expr;list | E

expr->expr + term
         | expr - term
         | term

term-> term * factor
          | term / factor
          | term div factor
          | term mod factor
          | factor

factor-> (expr)
             | id
             | num

其中,红字表示终结符,是由词法分析器提交给语法分析器的。我现在想扩展这个翻译器的功能,使其能支持正负号及乘方号,但不知怎样为这样的算数表达式构造无二义的上下文无关文法

南七夏 2022-10-06 13:21:08
说好的呢 2022-10-06 13:21:08

start-> list eof
list->expr;list | E

expr->expr + term
         | expr - term
         | term

term-> term * factor
          | term / factor_ultra
          | term div factor_ultra
          | term mod factor_ultra
          | term exp facor_ultra
          | factor_ultra

factor_ultra -> facor | unary-operator facor

unary-operator -> + | -

factor-> (expr)
             | id
             | num

其中term exp facor_ultra表示乘方,语义分析时可直接调用相关数学实现函数

以可爱出名 2022-10-06 13:21:08

你要是用yacc,就无所谓非要写无二义的文法,只要指定如果处理冲突,一样可以实现的。《Lex and Yacc》中第三章就有这个例子呀。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文