我尝试编写一些简单的规则,我明白了这个歧义
rule: field1 field2; //ambiguity between nsf1 and nsf2 even if I use lookahead k=4
field1: nsf1 | whatever1...;
field2: nsf2 | whatever2...;
nsf1: 'N' 'S' 'F' '1'; //meaning: no such field 1
nsf2: 'N' 'S' 'F' '2'; //meaning: no such field 2
我理解这种歧义,但我不明白为什么前瞻不能解决这个问题。
我有一个简单的解决方案,但我不喜欢它:
规则:(nsf1(nsf2 | whatever2)) | (whatever1(nsf2 | whatever2));
有人有更优雅的解决方案吗?
非常感谢, 克里斯
答案 0 :(得分:0)
我无法重现你的问题,但我能做的就是猜猜'what1'和'whatever2'的规则是什么。你能发表更完整的语法吗?
但是,语法中没有任何东西不能完全用词法分析器而不是解析器规则来完成。尝试将所有规则名称大写,将它们转换为词法分析器令牌,看看是否有帮助。