【发布时间】:2017-08-11 05:38:43
【问题描述】:
如果这个问题已经被问过,但似乎找不到,我提前道歉。
我刚刚开始使用 Antlr,使用 antlr4IDE for Eclipse 为一小部分 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 的新手,所以我可能犯了一个愚蠢的错误。提前致谢。
编辑:这是我的解析树和错误日志:
错误日志:
【问题讨论】: