ANTLR 4词法分析器是否支持字符类?我看到一些看起来像这样的例子没问题:
LITERAL: [a-zA-z]+;
但我发现它与字符串“OR [”匹配开头括号。使用范围:
LITERAL: ('a'..'z' | 'A'..'Z')+;
并且仅将“OR”标识为LITERAL。这是一个例子:
grammar Test;
@members {
private void log(String msg) {
System.out.println(msg);
}
}
parse
: expr EOF
;
expr
: atom {log("atom(" + $atom.text + ")");}
| l=expr OR r=expr {log("IOR:left(" + $l.text + ") right(" + $r.text + "}");}
| (OR '[' la=atom ra=atom ']') {log("POR:left(" + $la.text + ") right(" + $ra.text + "}");}
;
atom
: LITERAL
;
OR : O R ;
LITERAL: [a-zA-z]+;
//LITERAL: ('a'..'z' | 'A'..'Z')+;
SPACE
: [ \t\r\n] -> skip
;
fragment O: ('o'|'O');
fragment R: ('r'|'R');
当输入“OR [cat dog]”时,它正确分析,但“OR [cat dog]”没有。
答案 0 :(得分:1)
您可以在ANTLR 4词法分析器中使用字符集,但范围区分大小写。您使用[a-zA-z]
我认为您的意思是[a-zA-Z]
。