2014-09-25 53 views
0

在我的ANTLR語法中,我想檢測錯誤的關鍵字或錯誤的類型常量,例如, 'null'而不是'NULL'。我加入了語法錯誤的選擇,例如:檢測錯誤的語法(錯誤替代)以便快速修復

| extra='null' #error1 

如果我的自定義編輯器檢測到錯誤不斷,我可以用正確的常量替換它解決它。

但我不知道這是否是正確的方法來解決和檢測語法中的錯誤關鍵字或常量。

除了我試圖檢測語法缺少一個右(見ANTLR書章節9.4):

....... 
| 'if' '(' expr expr #error2 
| '{' exprlist #error3 
| 'while' '(' expr expr #error4 
........ 

但這種大規模減慢解析過程,所以我認爲這是錯誤的,這樣做的。

我的問題是:

它是正確的,因爲上述檢測這樣錯誤的關鍵詞,常數等?

是否有可能在沒有大規模速度下降的情況下捕捉文法中遺漏的關閉?

任何幫助表示讚賞。

回答

0

我發現我可以從規則提取第二令牌(以添加該位置處的大括號):

| 'if' '(' expr expr #error2 

與:

Token myToken = tokens.get(ctx.getChild(2).getSourceInterval().b); 
parser.notifyErrorListeners(........ 

然而,大量降低的速度解析器。