1

我需要知道如何为表达式创建语法以创建解析器和 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 遵循的顺序是下一个:

Take 7 with Exp in Exps, 跟随 Val

转到 RExp 并继续 RExp3。

取“*”,然后返回 Exps。

我在纸上看到的树是下一个:

    *  
  /   \  
3      +  
     /   \  
    7     5

我应该拥有的树是下一个:

     +
   /   \
  *    5
 / \
7   5 
4

0 回答 0