1

我尝试编写一些简单的规则,但我得到了这种歧义

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
  1. 我理解模棱两可,但我不明白为什么前瞻不能解决这个问题。

  2. 我有一个简单的解决方案,但我不喜欢它:

    规则: (nsf1 (nsf2 | 不管2)) | (whatever1(nsf2|whatever2));

有人有更优雅的解决方案吗?

非常感谢,克里斯

4

1 回答 1

0

我无法重现您的问题,但我所能做的就是猜测“whatever1”和“whatever2”的规则是什么。能发一个更完整的语法吗?

但是,语法中没有什么不能完全用词法分析器标记而不是解析器规则来完成。尝试将所有规则名称大写以将它们转换为词法分析器标记,看看是否有帮助。

于 2010-05-15T18:19:46.217 回答