2014-09-19 106 views
0

我正在開發一個項目,將一種語言轉換爲另一種語言,並使用GOLD Parser。我需要能夠將註釋納入我的轉換中,因爲我們不想丟失這些註釋。問題在於CommentLine和CommentBlock被視爲噪音並被捕獲並丟棄。有沒有簡單的方法來關閉這種行爲,以便讀取註釋時,它會通過樹的其餘部分發送,以便我可以像處理其他語句一樣對待它?GOLD解析器包括註釋

如果不是,有人可以幫助我將CommentLine轉換成規則,當分析時將像其他任何語句一樣對待?我使用VBScript的語法從GOLD分析器網站:

! Special comment definition 
Comment Line = '' 

在這一點上我唯一的選擇是當我的引擎讀取評論令牌,取原始數據和源代碼行數,並拋出成一個字典,我可以再引用它作爲其他標記進行處理。這是可行的,但可能會變得混亂。

+0

註釋可以在解析器輸入,這往往使跟他們打交道是正確的語言在任何地方出現語法中的元素最多是麻煩的。 – 2014-09-19 15:00:03

回答

2

由於5.0 Gold Parser改變了它的處理方式,它處理多個共享終端的組。這導致您使用到不行的定義(我假設你只是刪除了雷姆一部分,所以它會建立語法?)

由於5.0主要有兩點方面的變化:

  • 詞彙組
  • 組和終端屬性可以更改

因爲這個新行將被使用,如果需要換行符,換行符將被自動聲明。 (如評論)。

註釋+ X會自動被分類爲「噪音」,並且在解析時會被移除,以避免評論被定義爲噪音,您需要專門告訴它它是解析器邏輯必不可少的。

此外,您使用的代碼只能找到註釋開始但沒有做任何事情,爲了在'符號被找到後'捕獲'任何東西,我們需要聲明我們正在尋找的東西。

! Special Whitespace definition (All Whitespace's excluding new-lines) 
{WS} = {Whitespace} - {CR} - {LF} 

! Special Comment Line definition (All words,special White-spaces and defined symbols until a Line Break is found) 
Comment Line = ''({Alphanumeric} | {WS} | [.,-+="])*{All Newline} 
Rem Line = rem 

Comment Line @= {type= Content} 
Rem @= {type = Content } 

有了這個既被聲明爲兩行基團(註釋行和REM線) 我們定義既要導致均爲類型內容: 您可以沿着線的東西做到這一點視爲內容而不是默認噪音。 (因此不應該被解析器刪除)。

希望這有助於爲進一步閱讀:

http://goldparser.org/doc/grammars/define-groups.htm

http://goldparser.org/doc/grammars/group-attributes.htm

http://goldparser.org/doc/grammars/example-group.htm