当我为 C# 调试我的语法时,我注意到一些非常不寻常的事情:一些不被完整语法接受的输入被相同的语法接受,但删除了一些独立的规则。我找不到合乎逻辑的解释。例如:
CS - 这个语法不接受输入a<a<a>><EOF>
CS' - 这个语法与CS基本相同,但删除了一些独立的规则(规则不重新排序)确实接受a<a<a>><EOF>
正如您所看到的,两种语法都以规则开头,start: namespaceOrTypeName EOF;
因此它们应该调用同一组规则(CS永远不会调用那些在CS'中删除的规则)。我花了一天时间对此进行调试,删除或添加新规则,但找不到逻辑缺陷。任何帮助都会有用,谢谢。
编辑:将CS中的开始规则更改start: Identifier EOF;
为语法后,开始拒绝method
仅定义规则时通常接受的输入Identifier
。所以我想,因为有一条规则attributeTarget: ...| 'method' | ...
,在编译语法之后,一些短语会被保留,例如在这种情况下的“方法”,但我仍然不确定是否是这样。