gpt4 book ai didi

compiler-construction - 编译器如何在解析器过程中区分负数和负数

转载 作者:行者123 更新时间:2023-12-02 15:30:18 25 4
gpt4 key购买 nike

嘿,我最近参与了编译器开发,我遇到了减号 (-) 和负数 (-1) 的问题。假设现在我有5--3、5+-3,如何写一个文法规则使得在抽象语法树构建过程中,yacc会产生一个正确的抽象语法树?我的语法是这样的:
表达式:
持续的 {}
| ID {}
|执行表达式 {}

执行表达式:
expr 加上 expr {}
| expr 减去 expr {}
| expr MUL expr {}
| expr DIV expr {}

我现在的想法是使用最高阶(非关联)的 UMINUS 符号来处理这种情况。不知何故,我们的编译器必须将表达式拆分为 expr 和 exec_expr,我已经尝试过该方法,但由于某些原因它不起作用。

用任何其他语言处理这种情况的标准解决方案是什么?特别是那些有 LR(0) 自动机的。非常感谢!

最佳答案

作为实际工程的问题,词法分析器 通常不处理带符号的数字。

这意味着解析器可以处理减号,作为两个操作数之间的减法(第二个可能是一个数字),或者作为操作数的负数(其中的操作数可能是一个数字)。这也使得处理像“a- -7”这样的奇怪表达式变得容易。因此,您只需要“MINUS” token 。

您可以设计一个词法分析器和解析器,其中词法分析器吞没符号字符。通常它需要解析器的反馈才能知道做什么是安全的。这不便于组织,因此不利于实用的工程方法。

关于compiler-construction - 编译器如何在解析器过程中区分负数和负数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27478834/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com