在我的(简单的)语法中
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;
定义
或者还有什么可能导致这种(对我而言)意外行为?
答案 0 :(得分:0)
我认为你已经找到了解决方案,但为了记录。 你的空格词法规则应该是:
<component2>
在你的语法空间中,没有指定char,就是全部。