私は QuickBasic のパーサーを作成しようとしていますが、これはコメントを取得するための私の試みです:
grammar QuickBasic;
options 
{
    language = 'CSharp2';
    output = AST;
}
tokens
{
    COMMENT;
}
parse
    :    .* EOF
    ;
// DOESN'T WORK
Comment
    :    R E M t=~('\n')* { Text = $t; } -> ^(COMMENT $t)
    |    Quote t=~('\n')* { Text = $t; } -> ^(COMMENT $t)
    ;
Space  
    :    (' ' | '\t' | '\r' | '\n' | '\u000C') { Skip(); }  
    ;
fragment Quote : '\'';    
fragment E     : 'E' | 'e';
fragment M     : 'M' | 'm';
fragment R     : 'R' | 'r';
トークン COMMENT だけを使用して書き直しても、同じエラーが発生します。
// It DOESN'T WORK EITHER
Comment
    :    (R E M | Quote) ~('\n')* -> ^(COMMENT)
    ;
書き直しをあきらめると、うまくいきます:
// THIS WORKS
Comment
    :    (R E M | Quote) ~('\n')*
    ;