ゲーム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';
したがって、必要なのは、タイムスタンプのない行のエラーを生成せずにこれを解析する方法の例です。
ありがとう!