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