我有以下的Antlr語法:ANTLR的隱藏通道空白問題
grammar MyGrammar;
doc : intro planet;
intro : 'hi';
planet : 'world';
MLCOMMENT
: '/*' (options {greedy=false;} : .)* '*/' { $channel = HIDDEN; };
WHITESPACE : (
(' ' | '\t' | '\f')+
|
// handle newlines
('\r\n' // DOS/Windows
| '\r' // Macintosh
| '\n' // Unix
)
)
{ $channel = HIDDEN; };
在ANTLRWorks 1.2.3解釋器,輸入hi world
,hi/**/world
和hi /*A*/ world
工作,如所預期。
但是,輸入hiworld
,其中不應該工作,也被接受。 如何使hiworld
失敗?我如何在「hi」和「world」之間強制至少有一個空格(或註釋)?
請注意,在此示例中,我僅使用了MLCOMMENT和WHITESPACE來簡化,但其他類型的評論將受支持。使串hiworld
失敗
嗯,我不知道Antlr,但不會「doc:介紹WHITESPACE星球」或類似的東西最明顯? – schnaader 2009-07-18 16:58:59
由於通道WHITESPACE隱藏,導致MismatchedTokenException。 – luiscubal 2009-07-18 17:01:22
所以你不能創建另一個未隱藏的空白語法並使用它? – schnaader 2009-07-18 17:14:15