ANTLR4:空白和空间词法处理

时间:2016-02-03 12:47:40

标签: java parsing antlr4 lexer

在我的(简单的)语法中

    grammar test;


    prog: stat+;

    stat: 
              sourceDef ';'
    ;

    sourceDef: 
        SRC COLON ID 
    ;



    STRING : '"' ('""'|~'"')* '"' ; // quote-quote is an escaped quote

    LINE_COMMENT
        : '//' (~('\n'|'\r'))* -> skip;

    WS  : [ \t\n\r]+ -> skip;
    //SP : ' ' -> skip;


    COMMENT : '/*' .*? '*/' -> skip;
    LE: '<';
    MINUS: '-';
    GR: '>';  
    COLON: ':' ;
    HASH: '#';
    EQ: '=';
    SEMI: ';';
    COMMA: ','; 
    AND:  [Aa][Nn][Dd];
    SRC: [Ss][Rr][Cc];
    NUMBER: [0-9];
    ID: [a-zA-Z][a-zA-z0-9]+;
    DAY: ('0'[1-9]|[12][0-9]|'3'[01]);
    MONTH: ('0' [1-9]|'1'[012]);
    YEAR: [0-2] [890] NUMBER NUMBER;
    DATE: DAY  [- /.] MONTH [- /.] YEAR;

代码

src:xxx;

显示语法错误:

extraneous input ' ' expecting ':'

代码

src:xxx;

解决得很好。

的修改版本
    WS  : [\t\n\r]+ -> skip;
    SP : ' ' -> skip;

适用于两种语法版本(带空格和不带空格)。 所以空格似乎只是被跳过,如果它们是在a中定义的 单独的规则。

这个

有问题
    WS  : [ \t\n\r]+ -> skip;

定义

或者还有什么可能导致这种(对我而言)意外行为?

1 个答案:

答案 0 :(得分:0)

我认为你已经找到了解决方案,但为了记录。 你的空格词法规则应该是:

<component2>

在你的语法空间中,没有指定char,就是全部。