2016-03-08 68 views
3

我涉及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'; 

回答

2

我沒有用黃金包裹自己,但我已經使用Yacc的不少;語法佈局略有不同,但原理相同。

對於初學者,我會嘗試修改德爾福語法如下:

變化

<UsesClause>  ::= USES <IdList> ';' 
       | SynError 

<UsesClause>  ::= USES <UnitList> ';' 
       | SynError 

,並添加

<UnitList>  ::= <UnitList> ',' <UnitRef> 
       | <UnitRef> 

<UnitRef>  ::= <RefID> 
       | <RefID> IN <StringLiteral> 
!     | <RefID> in <StringLiteral> Comment Start <RefID> Comment End 

我」行已評論出使用感嘆號最初的目的是在你的例子來處理這種構造:

UnitDemoMain in 'UnitDemoMain.pas' {Form1}, 

然而,似乎是黃金的生成器對待開放和近距離大括號字符,{},作爲一個特殊的情況下,其似乎阻止他們被用作除了包圍評論之外的任何東西;我一直無法找到一種將它們用作語法規則的一部分的方法。這種改變的結果應該是希望'{Form1}'被簡單地忽略爲註釋,而示例結構與之前的變體(「< RefID> IN StringLiteral」)相匹配。

FWIW,黃金看起來相當不錯的包,除了幾個問題,包括

  • 在自述文件中提到,它只能處理文字0..127和

  • 其解析器的限制Builder(v.5.2)在使用它隨附的D7示例語法(在我建議的更改之前)運行時抱怨線路/狀態爲82的無效開始符號和詞彙錯誤。也許我錯過了某些東西...

+0

首先,謝謝你的回答。以下是更改的結果:Gold拒絕了中的「」,所以我將其更改爲「StringLiteral中的」「。因此,黃金很高興。但是,我們仍然遇到問題:實際解析* .dpk文件時,'in'位會引發錯誤。這是否意味着我們必須爲'in'定義單獨的規則;如果是這樣,怎麼樣? – Adem

+0

我正在使用XE2,我沒有收到任何「無效的開始符號和詞法錯誤」,無論有沒有更改。 – Adem

+0

奇數。您使用的是什麼版本的Builder和D7語法?正如我所說的,我的構建器爲5.2,並且語法文件D7Grammar.Grm爲31163字節,日期爲2006年8月28日,文件爲D7_v11.Zip。直到我得到建設者沒有抱怨的工作,我看不出我能提供更多幫助。 – MartynA

相關問題