如果这个问题已经被问过,我很抱歉找不到它。
我刚开始使用 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: '='
但是,当我手动将 token WS 添加到规则中时,我没有收到任何错误。
有什么地方出错了吗?我是 Antlr 的新手,所以我可能犯了一个愚蠢的错误。提前致谢。
编辑:这是我的解析树和错误日志:
错误日志:
最佳答案
像这样更改语法。
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]+ ;
关于java - Antlr Eclipse IDE White Space 没有被跳过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42895199/