[英]Correct LL(1) grammar for arithmetic expressions
這是正確的LL語法:
E-> TX
T->(E)Y | intY
X-> + E | -E | Ë
Y-> * E | / E | Ë
但它會為表達式生成相同的AST樹
int-int + int和int-(int + int)
當量
子(Simple(int),Add(Simple(int),Simple(int))
當然,我可以提前使用,但這並不酷。
試試這個語法
E -> T E'
E' -> + T E' | -TE' |epsilon
T -> F T'
T' -> * F T' | /FT' |epsilon
F -> (E) | int
通過在評估AST時添加一些其他“ if-s”來解決此問題。 語法保持不變
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.