1

我正在使用 Gold Parser v5.2。

我试图稍微修改Object Pascal Engine(由 Rob van den Brink 编写),以便它可以解析 .dpr 和 .dpk 文件以及 .pas 文件。

garmmar 文件(名为 D7Grammar.grm,在从上述链接下载的文件中)通过了 Gold 的分析 [项目 | 分析语法](进行以下修改)但因“项目 | 失败”而失败 创建 LALR 解析表。

对“D7Grammar.grm”文件的修改:

  1. 找到“FloatLiteral”的定义并将其重写为:

    FloatLiteral = {Digit} + '.' + {Digit} +
    
  2. 找到 '<UsesClause>' 并将其重写为:

    <UsesClause> ::= USES <UnitList> ';'
     | SynError
    
  3. 添加以下规则

    <UnitRef> ::= <RefID> !see http://stackoverflow.com/questions/35871440/
      | <RefID> IN 'StringLiteral'
      | <RefID> IN 'StringLiteral' Comment Start <RefID> Comment End
    
    <UnitList> ::= <UnitList> ',' <UnitRef>
      | <UnitRef>
    

完成这些后,当我发布 Project | 在 Gold Parser 中创建 LALR Parse 表,我收到以下错误。

')' 可以遵循多个完整的规则。Reduce-Reduce 错误是在语法允许同时减少两个或多个规则时导致的,因为相同的标记。语法模棱两可。请参阅文档以获取更多信息。

进一步点击会显示一个表格,显示/暗示“FieldDesignator”“EnumId”是罪魁祸首——还有一些我不知道它们的意思的更多信息。

我猜这种新的歧义已经被旧版本的 Gold(因为 D7Grammar.grm 那时没有问题)所考虑,但被新版本浮出水面。

麻烦的是,除了试错(主要是从随机想法或其他人的建议中复制/粘贴)之外,我对语法规则毫无用处。

因此,不用说,急需帮助来解决这个问题。

4

0 回答 0