0

我有一条文字“在某事上等等等等可以是任何东西”

我想匹配 ON,某事,“等等等等可以是任何东西”

我有我的代币

ON      :   ('O'|'o')('N'|'n');
INDEX: (options {greedy=false;}: ESC | .)*
WS  :
    (   ' '
        |   '\t'
        |   '\r'
        |   '\n'
        )+
        { $channel=HIDDEN; }
        ;  
ESC :
    '\\' ('"'|'\''|'\\')
    ;

我通常希望空格被丢弃,因此通道被隐藏,但在这种情况下,我想将字符串的其余部分与空格匹配。我如何在规则中做到这一点?就像是

myRule:在 INDEX REST 上;

但不确定 REST 应该是什么?(不确定我是否需要虚构的令牌)。

谢谢,院长

4

1 回答 1

1

如果我正确理解了您的问题,那么您的语法将是这样的(适用于您的示例):

grammar so1;

myRule: ON INDEX rest;

rest    :   ~('\r'|'\n')*;

ON      :   ('O'|'o')('N'|'n');

INDEX   :   (LETTER | DIGIT)+;

WS  :
(   ' '
    |   '\t'
    |   '\r'
    |   '\n'
    )+
    { $channel=HIDDEN; }
    ;  

fragment DIGIT : '0'..'9' ;
fragment LETTER : ('a'..'z' | 'A'..'Z' | '_');           
于 2012-09-19T15:21:45.917 回答