Мне нужно небольшое руководство по написанию грамматики для разбора лог-файла игры Aion. Я решил использовать 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';
Так что мне нужен пример того, как разобрать это без ошибок для строк без метки времени.
Спасибо!