在java中使用Antlr编写的语法

时间:2012-03-27 04:27:24

标签: antlr grammar

我是本节的新手,我想识别以下范围[1-3] [0-9]中的两位数整数。 我把它写成

goal        : firstD secondD WS firstD secondD;     
firstD      : '1'|'2'|'3';
secondD     : '0'|'1'|'2'|'3'|'4'|'5'|'6'|'7'|'8'|'9' ;
WS          :   (' '|'\t'|'\n'|'\r')+ {skip();} ;

但这会产生MismatchedTokenException。我的语法有什么问题吗?

2 个答案:

答案 0 :(得分:1)

您获得了MismatchedTokenException,因为您在WS规则中使用了goal规则。但是这个WS规则来自词法分析器skip。从goal规则中删除它,或从{skip();}中删除WS部分。

答案 1 :(得分:0)

试试这个白色空间:

 WS  :  (' '|'\r'|'\t'|'\u000C'|'\n') {$channel=HIDDEN;}
;

并从目标定义中删除WS。