表达的语法。四个优先级。 LL(1)

时间:2017-04-01 07:57:10

标签: parsing compiler-construction operators grammar ambiguous-grammar

我需要知道如何为表达式创建语法以创建解析器和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 

0 个答案:

没有答案