我正在尝试匹配以下序列:
var1.x , "cssStyleName : styleValue";
cssStyleName 和 styleValue 是……嗯……符合 css 的样式,例如color: #000 !important; *width: 99.94680851063829%;"
等。
inputSpecs: modelVariable (COMMA cssStyle )*;
modelVariable: TEXT ('.' childVar)*;
childVar : TEXT;
cssStyle: styleName COLON styleValue+ SEMICOLON;
styleName : ASTERISK? TEXT ;
styleValue : TEXT | STYLE_VALUE;
COLON: ':';
SEMICOLON: ';';
ASTERISK: '*';
COMMA: ',';
TEXT : ('a'..'z'|'A'..'Z'| '_' | '-' | '0'..'9')+ ;
STYLE_VALUE: ('a'..'z'|'A'..'Z'| '_' | '-' | '0'..'9' | '%' |'#' |'.')+ '!important'?;
问题在于在'.'
STYLE_VALUE 令牌的末尾声明。当我声明它时,我在解析var1.x后立即得到NoViableAltException,这可能是因为modelVariable匹配为 STYLE_VALUE 而不是 TEXT。
如何将 TEXT (STYLE_VALUE) 的子集匹配为 *STYLE_VALUE* 和'.' TEXT要匹配为 TEXT,前面有一个点?