java - Antlr Eclipse IDE White Space 没有被跳过

标签 java regex eclipse antlr4

如果这个问题已经被问过,我很抱歉找不到它。

我刚开始使用 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 的新手,所以我可能犯了一个愚蠢的错误。提前致谢。

编辑:这是我的解析树和错误日志:

Parse Tree

错误日志:

Error Log

最佳答案

像这样更改语法。

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]+ ; 

enter image description here

关于java - Antlr Eclipse IDE White Space 没有被跳过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42895199/

相关文章:

java - 自动增量不适用于 ID

javascript - 替换所有出现的字符,除非它是字符串中的最后一个字符(javascript)

java - groovy-eclipse-compiler 不显示编译器错误

Android SDK 需要 android developer toolkit 17.0.0 或以上版本

java - 处理脏区时发生内部错误

java - 属性的级别值错误,无法为 java.util.logging.FileHandler 设置级别

java - 我应该用 Erlang 编写自己的 flash-server 还是使用 Red5?

java - Mockito 可以验证模拟对象上的方法调用总数吗?

java - Pattern.matches() 给出 StackOverflowError

python - 在 python re 中分隔字符串中的第一个单词