簡體   English   中英

檢測錯誤的語法(錯誤替代)以進行快速修復

[英]Detect wrong grammar (error alternatives) for quick fixes

在我的ANTLR語法中,我想檢測錯誤的關鍵字或錯誤的類型常量,例如“ null”而不是“ NULL”。 我在語法中添加了錯誤替代,例如:

|   extra='null' #error1

如果在我的自定義編輯器中檢測到錯誤的常數,則可以通過用正確的常數替換它來修復它。

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

另外,我嘗試檢測語法中缺少的結尾(請參閱ANTLR書的第9.4章):

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

但這極大地減慢了解析過程,因此我認為這樣做是錯誤的。

我的問題是:

如上所述以這種方式檢測錯誤的關鍵字,常量等是否正確?

在不大幅降低速度的情況下,是否有可能以某種方式捕獲語法中缺少的結尾?

任何幫助表示贊賞。

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

|   'if' '(' expr  expr #error2

與:

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

但是,它大大降低了解析器的速度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM