我需要一點點指導,寫一個語法來解析遊戲永恆之塔的日誌文件。我決定使用Antlr3(因爲它似乎是一個可以完成這項工作的工具,我認爲這對我來說是學習使用它的好幫手)。但是,我遇到了問題,因爲日誌文件的結構不完整。幫助解析日誌文件(ANTLR3)
日誌文件我需要解析看起來像下面這樣:
2010.04.27 22:32:22 : You changed the connection status to Online.
2010.04.27 22:32:22 : You changed the group to the Solo state.
2010.04.27 22:32:22 : You changed the group to the Solo state.
2010.04.27 22:32:28 : Legion Message: www.xxxxxxxx.com (forum)
ventrillo: 19x.xxx.xxx.xxx
Port: 3712
Pass: xxxx (blabla)
4/27/2010 7:47 PM
2010.04.27 22:32:28 : You have item(s) left to settle in the sales agency window.
正如你所看到的,大多數生產線開始時間戳,但也有例外。我想在Antlr3中做的事情是編寫一個解析器,該解析器僅使用以時間戳開始的行,同時默默丟棄其他行。
這是我到目前爲止已經寫的(我用這些東西是初學者所以請不要笑:d)
grammar Antlr;
options {
language = Java;
}
logfile: line* EOF;
line : dataline | textline;
dataline: timestamp WS ':' WS text NL ;
textline: ~DIG text NL;
timestamp: four_dig '.' two_dig '.' two_dig WS two_dig ':' two_dig ':' two_dig ;
four_dig: DIG DIG DIG DIG;
two_dig: DIG DIG;
text: ~NL+;
/* Whitespace */
WS: (' ' | '\t')+;
/* New line goes to \r\n or EOF */
NL: '\r'? '\n' ;
/* Digits */
DIG : '0'..'9';
所以我需要的是如何分析這樣的一個例子不會爲沒有時間戳的行生成錯誤。
謝謝!
這似乎工作得很好,它很簡單明瞭。 Ofcouse,我會改變一些東西來做我需要的東西。謝謝! – Unknown 2010-05-12 17:27:05
@ user188106,不客氣。 – 2010-05-13 00:02:02