我需要知道如何为表达式创建语法以创建解析器和ast。我有四个优先级:
1. ** !
2. * / % &
3. + - ^ |
4. <= >= < >
我已经做到了:
Exps -> RExp4
RExp4 -> OpEq Exps | RExp3
RExp3 -> OpAd Exps | RExp2
RExp2 -> OpMul Exps | RExp1
RExp1 -> OpExp Exps | Exp
Exp -> Val | '('Exps')'
OpExp -> ** | !
OpMul -> * | / | % | &
OpAd -> + | - | ^
OpEq -> <= | >= | < | >
Val -> Id | Int
我不确定这是否有效,因为当我在纸上制作树时,我没有得到正确的表达形式,如:
x*7+7
基本上因为我先付款。我的语法必须是LL(1)并且右边是递归的,因为我的编译器将是自上而下的。
感谢您的帮助,对不起我的英语
抱歉,我错了,我的意思是解析器自上而下。我在纸上看到的问题是下一个。我有下一个表达式“7 * 5 + 5”,我的BNF遵循的顺序是下一个:
在Exps中使用Exp,然后是Val
转到RExp并继续到RExp3。
取'*'然后返回Exps。
我在纸上看到的树是下一个:
*
/ \
3 +
/ \
7 5
我应该拥有的树是下一个:
+
/ \
* 5
/ \
7 5