我正在尝试用我的 C 语法构建一个 AST,可以在这里找到。但是它不考虑操作的优先级,例如当我输入此代码时:
l = k*j*5 - 10;
我明白了:
操作由以下代码管理:
multiplicative_expression
: primary_expression (('*'^ additive_expression) | ('/'^ additive_expression) | ('%'^ additive_expression) )*
;
additive_expression
: multiplicative_expression (('+'^ multiplicative_expression) | ('-'^ multiplicative_expression))*
;
请问有解决办法吗?
另一个问题,有没有办法在构建 AST 时添加特殊令牌?例如这样的:
A B C -> ^( "VAR" B C)
VAR 是只能通过 AST 看到的新代币。
是否可以用其他东西重命名“nil”令牌?