删除第一个和跟随LL的集合交叉点(1)

时间:2018-03-23 03:06:30

标签: compiler-construction grammar ll

我目前正在为一个项目进行编译器构建,而且我正在使我的语法符合LL(1)。

我已经成功地替换了EBNF表示法,删除了左递归并做了一些因子分析,但我似乎陷入了在第一个和后一个集之间有交集的生产规则,导致歧义。 终端在单引号内,multIndice,idnest_和params与问题无关。 multIdnest的制作最终会为第一组和后续组合设置'id',我很难摆脱它。

任何有关如何向前推进的帮助都将非常感激,不一定只是为了解决我的问题,而是一般如何处理这种情况。

factor       -> multIdnest 'id' postCall | 'int' | 'float'
variable     -> multIdnest 'id' multIndice
functionCall -> multIdnest 'id' '(' params ')'
multIdnest   -> idnest multIdnest | EPSILON
idnest       -> 'id' idnest_

0 个答案:

没有答案