2013-12-23 21 views
3

解析以特定字符開頭的單詞嗎?如何解析以ANTLR3開頭的單詞java target

我一直在嘗試以下,但我不能得到任何有希望的結果:

//This one is working it accepts AD CD and such 
example1 
: 
    .'D' 
; 
//This one is not, it expects character D, then any ws character then any character 
example2 
: 
    'D'. 
; 
//These two are not working either 
example3 
: 
    'D'.* 
; 
//Doesn't accept input due to error: "line 1:3 missing 'D' at '<EOF>'" 
example4 
: 
    .*'D' 
; 


//just in case my WS rule: 
/** WhiteSpace Characters (HIDDEN)*/ 
WS : (' ' 
     | '\t' 
     )+ {$channel=HIDDEN;} 
    ; 

我提前

回答

1
//This one is not, it expects character D, then any ws character then any character 
example2 
: 
    'D'. 
; 
使用ANTLR 3.4

謝謝

不,它不接受令牌(不是字符!)'D'後跟一個空間和任何角色。由於example2是解析器規則,它不匹配字符,但匹配標記(有很大的區別!)。而且,由於您在單獨的頻道上放置了空格,因此該規則也不會匹配這些空格。最後,.(DOT)匹配任何標記(再次:不是任何字符!)。

的元字符更多信息(如.(DOT)),其意思不同的內部lexer-和語法規則:Negating inside lexer- and parser rules

//These two are not working either 
example3 
: 
    'D'.* 
; 
//Doesn't accept input due to error: "line 1:3 missing 'D' at '<EOF>'" 
example4 
: 
    .*'D' 
; 

除非你知道自己在做什麼,不要使用.*:他們在你的情況下吞噬太多(特別是當放置在規則的開始或結束時)。

它看起來像你試圖標記分析器內的東西(你所有的example規則都是解析器規則)。據我所知,這些應該是詞法規則。更多關於解析器和詞法分析器規則的區別,請參閱:Practical difference between parser rules and lexer rules in ANTLR?

+0

謝謝,這使我更好地理解了概念。 –

相關問題