我有这样的 ANTLR 语法:
grammar HelloGrammar1;
ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* ;
STATEMENT : 'hello' ID ';' ;
WS : (' '|'\t'|'\r'|'\n')* ;
我希望它解析以下文本:hello qwerty ;
. 它不以这种方式工作。如果我将字符串更改为helloqwerty;
,一切都很好。我还可以将语法更改为:
grammar HelloGrammar2;
ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* ;
STATEMENT : 'hello' WS ID WS ';' ;
WS : (' '|'\t'|'\r'|'\n')* ;
在这种情况下,hello qwerty ;
工作正常。是否可以让 ANTLR 自动跳过空格?(即 - 我想让 HelloGrammar1 使用hello qwerty ;
)
更新
如果有意义:我正在 ANTLRWorks 中对其进行测试。
更新 2
也试过这种方式:
grammar HelloGrammar;
ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* ;
STATEMENT : 'hello' ID ';' ;
WS : (' '|'\t'|'\r'|'\n') { $channel = HIDDEN; } ;
还是不行。
更新 3
我正在使用“解释器”选项卡并选择了“声明”规则。