|
|
1
1
实际上这里没有足够的信息来诊断整个问题,但我想我可以填补空白。
所指出的是,问题在于解析器已经识别的状态
解析器实际上不能仅仅通过查看分隔符标记来做出决定。它需要知道接下来是什么(例如,
在语法中添加数千之前不会发生这种情况,因为没有
试图在解析器中显式匹配空白与通常所称的“无扫描解析”类似,但这里的情况并非如此,因为您可能确实有一个扫描程序。然而,扫描仪没有正常工作;它无法删除没有语法值的标记。虽然有人喜欢无扫描解析,但人们普遍认为它会增加前瞻性要求。[注1]由于您无法增加lemon解析器的前瞻性(也无法增加许多其他基于yacc的解析器生成器),因此此类工具的无扫描解析存在问题。
在这种情况下,很难看到通过强制解析器处理分隔符,您可能会得到什么,并且很明显您已经失去了什么(LALR(1)可解析性),因此我建议您将空白和连字符放在扫描器的地板上,并从解析器中删除它们。您可能会认为这样做会导致错误的句子,例如:
如果您希望“连字符正确”,请务必从扫描仪返回连字符(而不是空白),然后仅在有用的地方接受它们:
这将不会产生任何偏移/减少冲突。 笔记
|