我試圖創建ANTLR語法,將解析以下輸入:如何使用ANTLR將所有內容都保存到文件末尾?
@code 123 some arbitrary text
我想將它拆分到三個標記:@code
,123
和空間之後的文字。它應該是一件很簡單,但我不明白如何使其工作..
我試圖創建ANTLR語法,將解析以下輸入:如何使用ANTLR將所有內容都保存到文件末尾?
@code 123 some arbitrary text
我想將它拆分到三個標記:@code
,123
和空間之後的文字。它應該是一件很簡單,但我不明白如何使其工作..
這聽起來不像antlr的一個很好的問題。您可以定義像AT這樣的令牌:@ [a-z +],NUMBER:[0-9] + WORD:[az] +和SIGNIFICANT_SPACE:[] + WS:[\ n] {skip();}
然後語法一樣,
在第[SIGNIFICANT_SPACE | WORD] +
並重構詞和空格,但它似乎是錯誤的。
您也可以查看antlr中的filter選項。您可以使用它來分析部分輸入,然後檢查令牌的字符範圍以獲取被過濾掉的行的部分。
這很簡單。
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。
對我來說,這個失敗與「以下替代品永遠不能匹配:1」,指的是「ANYTHING:。*」這一行。 – 2012-01-20 23:30:36
使用ANTLR是否是一個困難的要求?看起來你可以使用正則表達式。如果您確實需要ANTLR,那麼任意文本是否需要拆分爲令牌或單個令牌? – 2011-03-15 23:13:38