我正在使用Gold Parser v5.2。
我尝试稍微修改Object Pascal Engine(由Rob van den Brink提供),以便它可以解析.dpr和.dpk文件以及.pas文件。
garmmar文件(在上面链接下载的文件中名为D7Grammar.grm)通过Gold的分析[Project |分析语法](带有下面的修改)但是没有使用' Project |创建LALR Parse表'。
修改D7Grammar.grm'文件:
查找' FloatLiteral'的定义并将其重写为:
FloatLiteral = {Digit} + '.' + {Digit} +
查找'< UsesClause>'并将其重写为:
<UsesClause> ::= USES <UnitList> ';'
| SynError
添加以下规则
<UnitRef> ::= <RefID> !see http://stackoverflow.com/questions/35871440/
| <RefID> IN 'StringLiteral'
| <RefID> IN 'StringLiteral' Comment Start <RefID> Comment End
<UnitList> ::= <UnitList> ',' <UnitRef>
| <UnitRef>
完成这些后,当我发出Project |时创建LALR Parse表&#39;在Gold Parser中,我收到以下错误。
&#39;)&#39;可以遵循多个已完成的规则。降低 - 减少错误是 当语法允许两个或多个规则减少时引起的 同一时间,出于同样的原因。语法是暧昧的。请参阅 文档以获取更多信息。
进一步点击左右会显示一个表格,其中显示/暗示 &#39; FieldDesignator&#39; 和 &#39; EnumId&#39; 是罪魁祸首 - 以及一些我不知道其含义的更多信息。
我猜这种新的模糊性被旧版本的黄金版所覆盖(因为D7Grammar.grm当时没有问题),但新版本已经浮出水面。
麻烦的是,除了做出反复试验(主要是从随意的想法或其他人的建议中复制/粘贴),我对语法规则毫无用处。
因此,不用说,急需解决这个问题。