允许在antlr4中使用空格

时间:2014-05-13 07:28:32

标签: java antlr grammar antlr4

我正在写我的语法,但是我有空白空间的问题。如果我写“你好”,我的语法就会发挥作用。 +'世界'但如果我尝试编译如下所示的操作,我会遇到问题:

'你好' +'世界'

这是我的语法文件:

grammar Common;

identifierNum: hostId DOT observableId DOT method ':Num';
identifierString: hostId DOT observableId DOT method  ':String';


hostId: ID;
observableId: ID;
method: ID'('')';

MUL: '*';
DIV: '/'; 
ADD: '+';
SUB: '-';
DOT: '.';
MIN: '<';
MAX: '>';


ID: [a-zA-Z] [a-zA-Z0-9]*;
STRING: '\''[a-zA-Z0-9]+ '\'';
DIGIT: [0-9]+ ;
DOUBLE: [0-9]* DOT [0-9]+ ;


WS: [ \n\t]+ -> skip;

和这个

grammar Expression;
import Common;

expression:     stringExpr                      # StringExpression
    |           numExpr                         # NumExpression
    ;     

stringExpr:     stringExpr ADD stringExpr   # Concat
    |           STRING                      # BaseStr 
    |           identifierString            # IdString     
    |           '(' stringExpr ')'          # ParensString
    ;

numExpr:    numExpr op=(MUL|DIV) numExpr                # MulDiv
    |       numExpr op=(ADD|SUB) numExpr                # AddSub
    |       DIGIT                                       # Int
    |       DOUBLE                                      # Double
    |       identifierNum                               # IdNum      
    |       '(' numExpr ')'                             # ParensNum 
    ;

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您不允许空格成为STRING令牌的一部分,因此在解析此令牌之前,它将被过滤为WS。你可以改变它:

STRING: '\''[ a-zA-Z0-9]+ '\'';