【问题标题】:Allowing blank spaces in antlr4在 antlr4 中允许空格
【发布时间】:2014-05-13 07:28:32
【问题描述】:

我正在编写我的语法,但我无法允许空格。如果我写 'hello' + 'world',我的语法可以工作,但如果我尝试编译如下操作,我会遇到问题:

“你好”+“世界”

这是我的语法文件:

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 
    ;

感谢您的帮助!

【问题讨论】:

    标签: java antlr grammar antlr4


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-24
      • 2011-04-26
      • 2014-05-11
      • 2020-02-11
      • 2020-04-21
      相关资源
      最近更新 更多