减少 - 减少错误:..可以遵循多个已完成的规则

时间:2016-03-09 18:14:01

标签: delphi pascal gold-parser

我正在使用Gold Parser v5.2。

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

garmmar文件(在上面链接下载的文件中名为D7Grammar.grm)通过Gold的分析[Project |分析语法](带有下面的修改)但是没有使用' Project |创建LALR Parse表'。

修改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>
    
  4. 完成这些后,当我发出Project |时创建LALR Parse表&#39;在Gold Parser中,我收到以下错误。

      

    &#39;)&#39;可以遵循多个已完成的规则​​。降低 - 减少错误是   当语法允许两个或多个规则减少时引起的   同一时间,出于同样的原因。语法是暧昧的。请参阅   文档以获取更多信息。

    进一步点击左右会显示一个表格,其中显示/暗示 &#39; FieldDesignator&#39; &#39; EnumId&#39; 是罪魁祸首 - 以及一些我不知道其含义的更多信息。

    我猜这种新的模糊性被旧版本的黄金版所覆盖(因为D7Grammar.grm当时没有问题),但新版本已经浮出水面。

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

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

0 个答案:

没有答案