如果此问题已经被问过,我提前道歉,因为我找不到它。
我刚开始学习Antlr,使用Eclipse的antlr4IDE创建了一个Java的小型子集解析器。出于某些原因,除非我在正则表达式中明确声明空格的存在,否则解析器将会报错。
我的语法:
grammar Hello;
r :
(Statement ';')+
;
Statement:
DECL | INIT
;
DECL:
'int' ID
;
INIT:
DECL '=' NUMEXPR
;
NUMEXPR :
Number OP Number | Number
;
OP :
'+'
| '-'
| '/'
| '*'
;
WS :
[ \t\r\n\u000C]+ -> skip
;
Number:
[0-9]+
;
ID :
[a-zA-Z]+
;
当尝试解析
int hello = 76;
我收到了这个错误:
Hello::r:1:0: mismatched input 'int' expecting Statement
Hello::r:1:10: token recognition error at: '='
然而,当我手动将令牌WS添加到规则中时,就不会收到错误提示。
你有什么想法吗?由于我是Antlr的新手,所以可能会犯一些愚蠢的错误。提前感谢。
编辑:这是我的语法树和错误日志:
错误日志: