antlr,我似乎无法找到如何匹配线的其余部分(包括空格)

时间:2012-07-10 00:11:49

标签: antlr antlr3

我有一个文字“ON blah blah blah blah可能是什么”

我希望匹配ON,某事,“等等等等等等等等”

我有我的代币

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

我通常希望丢失空格,因此隐藏了通道,但在这种情况下,我希望将字符串的其余部分与空格匹配。我该如何在规则中这样做?像

这样的东西

myRule:ON INDEX REST;

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

感谢, 迪安

1 个答案:

答案 0 :(得分: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' | '_');