2014-09-24 53 views
1

在我的自定義編輯器中,我想更正從額外錯誤解析器規則中檢測到的錯誤。如何從解析器規則獲取指定索引處的令牌

例如,我有我的解析器這個錯誤規則:

| 'if' '(' expr ')' ')' expr 

檢測不必要的括號內。

我可以在偵聽器中獲取開始和停止令牌並計算位置。

但是對於我的修復,我需要額外的圓括號標記(在索引5)來計算我的自定義語言編輯器中的位置,然後可以刪除該char。

根據解析器規則在指定索引處獲取令牌的正確方法是什麼?

任何幫助表示讚賞。

回答

1

最簡單的將是標籤額外)這樣的:

| 'if' '(' expr ')' extra=')' expr 

在你的聽衆,你就可以執行下列操作以獲得)的指標:

int index = ctx.extra.getStartIndex(); 

如果extra標籤的替代品未被解析,您可能會得到一個NPE,因此當有多個替代品時,請檢查ctx.extra是不是null

+0

謝謝,這正是我需要的。是否還有一個額外的標籤,如果我嘗試檢測缺少的括號,例如:| ''''''''('expr expr \t or:| \t'{'exprlist類似於相反的東西,例如extra =''? – Marcel 2014-09-24 11:20:39

+0

不,你不能標記丟失的標記 – 2014-09-24 12:37:13

+0

再次感謝你的快速回答! – Marcel 2014-09-24 13:49:50