如何通过ANTLR3定义unquote literal和quote literal?

时间:2016-01-11 06:47:37

标签: java antlr antlr3

我需要匹配一个参数,该参数可以是unquote literal或double quote literal。以下是我的代码,它无法正确匹配。

DOUBLE_QUOTE: '\"';

fragment
SP         : ' '+;

UnquotedString
     :  
     ( ESC_SEQ | ~('\\'|'"'|' '|'\t') )*
     ;

QuotedLiteral
    :
    DOUBLE_QUOTE (SP UnquotedString)* DOUBLE_QUOTE
    ;

fragment
ESC_SEQ
    :   '\\' ('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\')
     |   UNICODE_ESC
     |   OCTAL_ESC
     ;

fragment
HEX_DIGIT : ('0'..'9'|'a'..'f'|'A'..'F') ;

fragment
OCTAL_ESC
    :   '\\' ('0'..'3') ('0'..'7') ('0'..'7')
    |   '\\' ('0'..'7') ('0'..'7')
    |   '\\' ('0'..'7')
    ;

fragment
UNICODE_ESC
    :   
    '\\' 'u' HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT
    ;

Parameter
    :
     UnquotedString | QuotedLiteral
    ;

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

例如,当我输入 para1 OPERATOR" para2" 时,参数规则可以匹配 para1 " PARA2"

1 个答案:

答案 0 :(得分:0)

QuotedLiteral
:
DOUBLE_QUOTE (SP UnquotedString)* DOUBLE_QUOTE
;

- 这意味着QuotedLiteral可以匹配"",或者在开始引用后必须有空格。这可能不是你想要的。