2014-01-24 163 views
1

我們想要ANTLR語法,其中第一位的「0」與其他位置的處理方式不同。ANTLR位置特定標記

採樣輸入

0 Test 
World 0 

反正是有確定位置或上下文特定的令牌?

目前我們正在編寫代碼來更改令牌類型。

語法

// Define a grammar called Hello 
grammar Hello; 

r : (r2 | r1)+ ; 

r2 : 'World' Num ; 
r1 : keyZero 'Test'; 

keyZero : {_input.LT(1).getCharPositionInLine() == 0}? Num ; 
Num : [0-9]+ ; 

Ws : [ ] -> skip; 
Eol : [\r\n]->skip; 

回答

1

它可以在詞法分析器來處理:

grammar Hello; 

r : (r2 | r1)+ EOF; 
r2 : 'World' NUM ; 
r1 : KEY_ZERO 'Test'; 

KEY_ZERO : {getCharPositionInLine() == 0}? [0-9]+; 
NUM  : [0-9]+; 
SPACE : [ \r\n] -> skip; 
+0

它的工作..謝謝巴特。我們修改語法..只是刪除_input,它爲我們工作。 – Manikumar