ANTLR4中是否允许使用字符类?

ANTLR4中是否允许使用字符类?,antlr4,Antlr4,ANTLR 4 lexer是否支持字符类?我看到了一些例子,看起来像是这样的: LITERAL:[a-zA-z]+ 但我发现它与开头括号中的字符串“或[”匹配。使用范围: LITERAL:('a'..'z'|'a'..'z')+; 仅将“或”标识为文字。下面是一个示例: grammar Test; @members { private void log(String msg) { System.out.println(msg); } } parse : expr EOF

ANTLR 4 lexer是否支持字符类?我看到了一些例子,看起来像是这样的:

LITERAL:[a-zA-z]+

但我发现它与开头括号中的字符串“或[”匹配。使用范围:

LITERAL:('a'..'z'|'a'..'z')+;

仅将“或”标识为文字。下面是一个示例:

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');

当输入“或[cat dog]”时,它能正确解析,但“或[cat dog]”不能正确解析。

您可以在ANTLR 4 lexers中使用字符集,但范围区分大小写。您使用了
[a-zA-z]
,我相信您的意思是
[a-zA-z]

天哪,我真不敢相信我看了多少遍都没有注意到箱子是错的。可能是时候换新眼镜了。谢谢,280Z28。