1
我有一個ANTLR的語法是這樣的:製作ANTLRWorks處理空格自動
grammar HelloGrammar1;
ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* ;
STATEMENT : 'hello' ID ';' ;
WS : (' '|'\t'|'\r'|'\n')* ;
我希望它來分析以下文字:hello qwerty ;
。它不以這種方式工作。如果我將字符串更改爲helloqwerty;
,則一切正常。我也可以改變語法爲:
grammar HelloGrammar2;
ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* ;
STATEMENT : 'hello' WS ID WS ';' ;
WS : (' '|'\t'|'\r'|'\n')* ;
而在這種情況下,hello qwerty ;
工作正常。是否有可能讓ANTLR自動跳過空格? (即 - 我想讓HelloGrammar1工作,hello qwerty ;
)
更新
如果它是有道理的:我在ANTLRWorks測試它。
更新2
也試過這樣:
grammar HelloGrammar;
ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* ;
STATEMENT : 'hello' ID ';' ;
WS : (' '|'\t'|'\r'|'\n') { $channel = HIDDEN; } ;
還不行。
更新3
我使用的是選擇了 「聲明」 規則 「解釋」 選項卡。
什麼是想要被允許的輸入? – luketorjussen
請注意,詞法分析器規則不應生成可(可能)匹配零個字符(空字符串)的標記。詞法分析器會產生無數的數字。因此'('''''''''''''''''''')*'應該是'(''''''''''''''''或'(' ''''\ t'|'\ r'|'\ n')+'。 –