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

ig-*_*nyk 1 compiler-construction parsing interpreter

这是一个正确的LL语法:

E-> TX

T - >(E)Y | intY

X - > + E | -E | Ë

Y - >*E |/E | Ë

但它会为表达式生成相同的AST树

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

EQ

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

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

cod*_*ker 11

试试这个语法吧

E  -> T E'
E' -> + T E' | -TE' |epsilon
T  -> F T'
T' -> * F T' | /FT' |epsilon
F  -> (E) | int
Run Code Online (Sandbox Code Playgroud)