2016-01-11 41 views
0

我需要匹配一個參數,它或者不引用文字或雙引號文字。以下是我的代碼,它不能正確匹配。ANTLR3如何定義非引號字面值和引號字面值?

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;} 
    ; 

例如,當I輸入PARA1 OPERATOR 「PARA2」,所述參數規則可以被匹配PARA1「PARA2」

回答

0
QuotedLiteral 
: 
DOUBLE_QUOTE (SP UnquotedString)* DOUBLE_QUOTE 
; 

- 這意味着QuotedLiteral或者匹配"",或者必須有開始報價後的空白。這可能不是你想要的。