Ich brauche ein wenig Anleitung beim Schreiben einer Grammatik, um die Protokolldatei des Spiels Aion zu analysieren. Ich habe mich für die Verwendung von Antlr3 entschieden (weil es ein Werkzeug zu sein scheint, das den Job erledigen kann und ich fand es gut, dass ich es benutze). Ich habe jedoch Probleme festgestellt, weil die Protokolldatei nicht genau strukturiert ist.Hilfe beim Analysieren einer Protokolldatei (ANTLR3)
Die Log-Datei Ich brauche aussieht wie das unten zu analysieren:
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.
Wie Sie sehen können, die meisten Linien mit einem Zeitstempel zu starten, aber es gibt Ausnahmen. In Antlr3 möchte ich einen Parser schreiben, der nur die Zeilen verwendet, die mit dem Zeitstempel beginnen, während die anderen stillschweigend verworfen werden.
Das ist, was ich bisher geschrieben habe (ich bin ein Anfänger mit diesen Dingen so bitte nicht lachen: 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';
Also, was ich brauche, ist ein Beispiel dafür, wie dies zu analysieren ohne Fehler für Zeilen ohne den Zeitstempel zu erzeugen.
Danke!
Das scheint ziemlich gut zu funktionieren und es ist einfach und klar. Ofcouse, ich werde etwas ändern, um zu tun, was immer ich brauche. Danke! – Unknown
@ user188106, gern geschehen. –