这是一个正确的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))
当然,我可以使用一些前瞻,但这并不酷。
答案 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。语法保持不变