2012-12-27 12 views
2

我正在使用ANTLRWorks的調試模式來測試我的c語法。在ANTLRWorks中進行調試對於更好地理解非常有用,但是我在理解輸出樹的不同顏色時遇到了問題。我在語法中使用backtrack=true。我認爲紅色意味着調試器走錯了方向,而綠色則告訴我它已經走了正確的道路。但是暗紅色和深綠色呢?ANTLRWorks調試 - 不同顏色的含義?

我增加了一個「小的樹」,它只有符合下列輸入的畫面:

int test; 

enter image description here

如果有必要回答這個問題,這裏是它們的4個最重要的規則用過的。

start 
: declaration* 
; 

declaration 
: functionDefinition 
| dataDeclaration //also used for Function Declaration 
| assemblerDefinition 
; 


functionDefinition 
: declarationSpecifier* declarator Equals Default Semi 
| declarationSpecifier* declarator Equals Delete Semi 
| declarationSpecifier* declarator functionBody 
; 

dataDeclaration 
:declarationSpecifier* declarator initializer? (Comma declarator initializer?)* Semi 
; 
+0

我知道這個問題有點老,但我會很感激接受,因爲我回答了問題或評論,如果你認爲它不正確。謝謝! – cb4

回答

1

這不是關於「正確」和「錯誤」,因爲它關於解析器試圖找出哪個規則將匹配輸入。當ANTLR必須回溯時,ANTLRWorks使用紅色表示分析樹的分支,它認爲可能與匹配。綠色用於分析器實際探索的分支,黑色用於成功匹配輸入的分支。較暗和較淺的顏色是ANTLRWorks,爲嵌套級別的回溯提供視覺反饋 - 級別越深,顏色越深。

此答案的主要來源是由Bovet(創建ANTLRWorks)和Parr(創建ANTLR)編寫的ANTLRWorks: An ANTLR Grammar Development Environment Unpublished Draft

從8頁:

由解析器所採取的路徑被示出爲綠色

從15頁:

當ANTLR必須回溯替代生產加以區分,調試解析器通常很難,因爲開發人員必須跟蹤解析器何時進行推測以及何時不是 。 ANTLRWorks通過在分析樹中以紅色顯示所有推測性解析分支來清楚地區分這兩種模式。 ...第二個子樹[以黑色顯示]是規則s中成功匹配的第二個替代方案的解析樹。在ANTLR必須嵌套回溯的情況下,ANTLRWorks通過一系列等級改變顏色,每個回溯嵌套等級。