2016-12-14 8 views
0

があるときにエラーがスローされますので、これは私の文法である:ANTLRは、テキストをコンパイルしますが、常に空白

grammar Test; 

prog: stmt_list; 

stmt_list 
: stmt_list stmt ';' 
| stmt ';' 
; 

stmt 
: assignment 
| bind 
; 

assignment: 'var' IDENTIFIER ('=' | '+=' | '-=' | '*=' | '/=') expression; 

type 
: IDENTIFIER 
| primitiveType 
; 

primitiveType 
: 'int' 
| 'float' 
| 'string' 
| 'bool' 
; 

expression 
: atom 
| expression ('*' | '/') expression 
| expression ('+' | '-') expression 
; 

atom 
: '(' expression ')' 
| IDENTIFIER 
| INT 
| STRING 
; 

IDENTIFIER: [A-z_][A-z_0-9]*; 


INT: [1-9][0-9]*; 
STRING: '"' [A-z] '"'; 

WS: [\t\r\n]+ -> channel(HIDDEN); 

私はANTLRでそれをコンパイルすることができ、すべてが正常に動作します。 grunでテストすると、コンパイルされますが、空白がある場合はいつでも "トークン認識エラー"がスローされます。この入力でたとえば:

var a = b + c; 

私が取得:

line 1:3 token recognition error at: ' ' 
line 1:5 token recognition error at: ' ' 
line 1:7 token recognition error at: ' ' 
line 1:9 token recognition error at: ' ' 
line 1:11 token recognition error at: ' ' 

このすべての作品が、私は、これらのメッセージを取り除くことができれば、それはまだいいだろうほか。

答えて

3

空白ではなく、隠しチャンネルにのみタブと改行文字を挿入しています。

の代わりに:

WS: [\t\r\n]+ -> channel(HIDDEN); 

行います

WS: [ \t\r\n]+ -> channel(HIDDEN); 
関連する問題