纠正算术表达式的LL(1)语法

时间:2014-05-24 12:46:05

标签: parsing compiler-construction interpreter

这是一个正确的LL语法:

  

E-> TX

     

T->(E)Y | intY

     

X-> + E | -E | ë

     

Y-> * E | / E | ë

但它会为表达式

生成相同的AST树
  

int-int + int和int-(int + int)

e.q

  

子(简单(INT),添加(简单(INT),简单(INT))

当然,我可以使用一些前瞻,但这并不酷。

2 个答案:

答案 0 :(得分:11)

试试这个语法

E  -> T E'
E' -> + T E' | -TE' |epsilon
T  -> F T'
T' -> * F T' | /FT' |epsilon
F  -> (E) | int

答案 1 :(得分:0)

通过添加一些额外的" if-s"解决了这个问题。评估AST。语法保持不变