2014-02-18 75 views
0

我嘗試解析此一段文字需要Antlr4詞法分析器謂詞嗎?

:20: test :254: 
aapje 
:21: rest 
... 

:20::21:有特殊標籤,因爲他們開始行。 :254:應該是'普通'文本,因爲它不在換行符上開始。

我想的結果是

(20, 'test :254: \naapje') 
(21, 'rest') 

線使用的是\r\n或「\ n」

我開始試圖忽略的空白終止,但後來我匹配「:254 :'標籤。所以我必須創建一些使用空白信息的東西。

我想做什麼就能做的是這樣的:

lexer grammar MT9740_lexer; 

InTagNewLine : '\r\n' ~':'; 
ReadNewLine :'\r\n' ; 

但是第一次將消耗:如何我還可以生成這些令牌?還是有一個聰明的做法?

回答

1

我的理解是,你正在尋找一些符合行首的詞法分析規則。這詞法規則應該記號化您:20:或:21:出現在一條線則僅

SOL : {getCharPositionInLine() == 0}? ':' [0-9]+ ':' ; 

你的語法規則可以解析行的其餘部分之前尋找這個SOL令牌的開始。