2011-03-15 47 views
0

我試圖創建ANTLR語法,將解析以下輸入:如何使用ANTLR將所有內容都保存到文件末尾?

@code 123 some arbitrary text 

我想將它拆分到三個標記:@code123和空間之後的文字。它應該是一件很簡單,但我不明白如何使其工作..

+0

使用ANTLR是否是一個困難的要求?看起來你可以使用正則表達式。如果您確實需要ANTLR,那麼任意文本是否需要拆分爲令牌或單個令牌? – 2011-03-15 23:13:38

回答

1

這聽起來不像antlr的一個很好的問題。您可以定義像AT這樣的令牌:@ [a-z +],NUMBER:[0-9] + WORD:[az] +和SIGNIFICANT_SPACE:[] + WS:[\ n] {skip();}

然後語法一樣,

在第[SIGNIFICANT_SPACE | WORD] +

並重構詞和空格,但它似乎是錯誤的。

您也可以查看antlr中的filter選項。您可以使用它來分析部分輸入,然後檢查令牌的字符範圍以獲取被過濾掉的行的部分。

0

這很簡單。

program : start ID end; 

start : '@' ID; 

end : ANYTHING; 

ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'0'..'1')*; 
ANYTHING : .*; 
WS : (' '|'\n'|'\r'|'\t')+ {$channel = HIDDEN;}; 

除此之外,您只需要擴展規則以適合您的目的。

這應該與ANTLR3一起工作,但我不知道ANTLR2。

+0

對我來說,這個失敗與「以下替代品永遠不能匹配:1」,指的是「ANYTHING:。*」這一行。 – 2012-01-20 23:30:36

相關問題