私はANTLRのデータファイルを解析しようとしています - それはANTLRのオプションの空白をどのように管理できますか?
3 6
97 12
15 18
ラインが開始と終了があり、次のショーで例示オプションの空白があります。最後に改行があり、タブがありません。
^ 3 6$
^ 97 12$
^ 15 18$
^
私の文法は次のとおりです。
line 1:0 mismatched input ' ' expecting WSOPT
WSOPT :null:
NUM1 3
WS : :
NUM2 6
line 2:0 mismatched input ' ' expecting WSOPT
WSOPT :null:
NUM1 97
WS : :
NUM2 12
BUILD SUCCESSFUL (total time: 1 second)
を与える
lines : line+;
line : ws1 {System.out.println("WSOPT :"+$ws1.text+":");}
num1 {System.out.println("NUM1 "+$num1.text);}
ws2 {System.out.println("WS :"+$ws2.text+":");}
num2 {System.out.println("NUM2 "+$num2.text);}
NEWLINE
;
num1 : INT ;
num2 : INT ;
ws1 : WSOPT;
ws2 : WS;
INT : '0'..'9'+;
NEWLINE : '\r'? '\n';
//WS : (' '|'\t')+ ;
WS : (' ')+ ;
WSOPT : (' ')* ;
(すなわち、主要なWSが認識されていないと、最後の行が失われました)。
私は、次のような空白なしで始まる行、解析したい:私はWSを解析の一般的な説明をいただければと思います
line 1:0 required (...)+ loop did not match anything at input ' '
:
^12 34$
^ 23 97$
を私は、その後のようなエラーが出ANTLR。それは明らかにトリッキーな領域です{ignore=WS}
私が働いているから「決定的ANTLRリファレンス」の本には表示されません -
EDIT @jitterは便利な答えを持っています。
lines : line line line;
line
options { ignore=WS; }
:
ws1 {System.out.println("WSOPT :"+$ws1.text+":");}
num1 {System.out.println("NUM1 "+$num1.text);}
ws2 {System.out.println("WS :"+$ws2.text+":");}
num2 {System.out.println("NUM2 "+$num2.text);}
NEWLINE
;
が、エラーを取得:
illegal option ignore
EDITどうやらこれはV3から削除されました: http://www.antlr.org/pipermail/antlr-interest/2007-February/019423.html
私はこれを変更した、まだ を必要HELP
+1、私は同じ問題を抱え、レモンパーサーの大きなハックを使用してしまいました。これに続いて興味を持ってください。 –
@tinkertimありがとう - それは完全なダミーではないことを知ることは常にいいです。 –