我涉及Object Pascal Engine(Rob van den Brink),它似乎(除了一些小的和容易更正的錯誤外)適用於Delphi單元文件。使用Gold Parser解析項目和包文件--help需要'IdList'
但是,解析Project(.dpr)和Package(.dk)文件時出現問題;這個問題基本上歸結爲「使用」在單元和項目中可能具有的差異(以及包中包含的「包含」子句)之間的差異。
我舉簡單的例子:
在一個單元(.PAS)文件時, '用途' 條款可以是這樣的
uses
Windows,
Messages,
SysUtils,
Variants,
Classes,
Graphics,
Controls,
Forms,
Dialogs,
StdCtrls,
ExtCtrls,
ComCtrls;
,而在一個項目(.dpr)文件
uses
Forms,
UnitDemoMain in 'UnitDemoMain.pas' {Form1},
SomeUnit in '..\SomeUnit.pas',
SomeOtherUnit;
然而,相同的功能(在 '包含' 的名稱)發生是由於:
contains
OneUnit in 'OneUnit.pas',
AnotherUnit in '..\AnotherUnit.pas';
我有(從上面的鏈接)的語法文件的問題是,它只處理最簡單的情況(即'使用'的方式出現在單元文件中),併爲別人拋出錯誤。
我猜測它歸結如何「IDLIST」在語法文件,這是本定義:
<IdList> ::= <IdList> ',' <RefId>
| <RefId>
我的問題的話,就是:我如何改變這個定義,使之能處理其他替代品(如項目和Pacckage文件所示),即:
UnitDemoMain in 'UnitDemoMain.pas' {Form1},
OneUnit in 'OneUnit.pas';
首先,謝謝你的回答。以下是更改的結果:Gold拒絕了中的「」,所以我將其更改爲「StringLiteral中的」「。因此,黃金很高興。但是,我們仍然遇到問題:實際解析* .dpk文件時,'in'位會引發錯誤。這是否意味着我們必須爲'in'定義單獨的規則;如果是這樣,怎麼樣? –
Adem
我正在使用XE2,我沒有收到任何「無效的開始符號和詞法錯誤」,無論有沒有更改。 – Adem
奇數。您使用的是什麼版本的Builder和D7語法?正如我所說的,我的構建器爲5.2,並且語法文件D7Grammar.Grm爲31163字節,日期爲2006年8月28日,文件爲D7_v11.Zip。直到我得到建設者沒有抱怨的工作,我看不出我能提供更多幫助。 – MartynA