ログ ファイルを解析するための ANTLR 文法を作成していて、問題に直面しました。次のように問題を再現するために文法を単純化しました。
stmt1:
'[ ' elapse ': ' stmt2
;
stmt2:
'[xxx'
;
stmt3:
': [yyy'
;
elapse :
FLOAT;
FLOAT
: ('0'..'9')+ '.' ('0'..'9')*
;
次の文字列を使用して文法をテストしたとき:
[ 98.9: [xxx
エラーが発生しました:
E:\work\antlr\output\__Test___input.txt line 1:9 mismatched character 'x' expecting 'y'
E:\work\antlr\output\__Test___input.txt line 1:10 no viable alternative at character 'x'
E:\work\antlr\output\__Test___input.txt line 1:11 no viable alternative at character 'x'
E:\work\antlr\output\__Test___input.txt line 1:12 mismatched input '<EOF>' expecting ': '
しかし、ルール「stmt3」を削除すると、同じ文字列が受け入れられます。
何が起こったのかわかりません...
アドバイスをありがとう!
レオン
バートからの助けに感謝します。私は文法を修正しようとしました。ベースラインとして、すべてのトークンを明確にする必要があると思います。そして、ルールを簡素化するために WS トークンを追加します。
stmt1:
'[' elapse ':' stmt2
;
stmt2:
'[' 'xxx'
;
stmt3:
':' '[' 'yyy'
;
elapse :
FLOAT;
FLOAT
: ('0'..'9')+ '.' ('0'..'9')*
;
WS : (' ' |'\t' |'\n' |'\r' )+ {skip();} ;