【发布时间】:2013-08-15 23:20:39
【问题描述】:
我想学习如何解决将语法转移到 LL(1) 的问题。我有以下问题:
E -> E + E
E -> E * E
E -> E[ E ]
E -> int
E -> id
关于运算符 '+' 和 '*' 我知道解决方案:
E -> TA
A -> + TA
A -> epsilon
T -> FB
B -> * FB
B -> epsilon
问题是如何处理索引运算符,同时我们必须避免左递归?
有人知道解决办法吗?
谢谢。
【问题讨论】:
-
简单:使其成为后缀运算符,并应用 right 递归,C89 语法就是这样做的。
-
为什么你认为它与你知道如何处理的案件不同?
-
好吧,如果我喜欢另一个:
F -> GC C -> [ E ]C C -> epsilon G -> id G -> int我在想我不会得到相同的结果。但现在它看起来像是一个可行的解决方案。你怎么看? -
@MilošLjumović:我想你差不多明白了,虽然我不知道
int[E]在你的语言中是否有效。我会选择F->G C; F->int; C->[ E ] C; C->epsilon; G->id; G->( E )
标签: compiler-construction grammar