我目前正在为一个项目进行编译器构建,而且我正在使我的语法符合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_