我需要匹配一个参数,该参数可以是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"
答案 0 :(得分:0)
QuotedLiteral
:
DOUBLE_QUOTE (SP UnquotedString)* DOUBLE_QUOTE
;
- 这意味着QuotedLiteral
可以匹配""
,或者在开始引用后必须有空格。这可能不是你想要的。