2014-05-13 3 views
0

문법을 쓰고 있지만 공백을 허용하는 데 문제가 있습니다. 내 문법 일 나는 내가 문제가 다음과 같이 작업을 컴파일하려고하면 내가하지만 '안녕하세요'+ '세계 작성하는 경우 : 이것은 내 문법 파일입니다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

공백이 STRING 토큰의 일부가 아니므로이 토큰이 해결되기 전에 공백이 WS로 필터링됩니다. 다음과 같이 변경할 수 있습니다.

STRING: '\''[ a-zA-Z0-9]+ '\''; 
관련 문제