0
在我(simplyfied)語法ANTLR4:空白和空間詞彙處理
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;
代碼
源:XXX;
示出了語法錯誤:
extraneous input ' ' expecting ':'
代碼
src:xxx;
解析細。
修改後的版本與
WS : [\t\n\r]+ -> skip;
SP : ' ' -> skip;
正常工作與兩個語法版本(帶和不帶空格)。 因此,這些空格似乎只能被跳過,如果它們被定義在 單獨的規則中。
有毛病這個
WS : [ \t\n\r]+ -> skip;
定義是什麼?
還有什麼可能導致這種(對我)意想不到的行爲?
這很令人困惑:這個定義有很多例子,所以我不這麼認爲,這可能就是問題所在。 你的意思是撇號是問題嗎? – Mike75
我不得不承認,我還沒有測試過你的語法,但是如果它確實與單獨定義的SP令牌一起工作,我敢打賭這就是原因。大概是這樣,試試吧。我更喜歡使用'撇號'語法來表示正則表達式,因爲它更具可讀性。如果您想使用[]語法,請嘗試[\ s \ r \ t \ n]。 – Divisadero