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

时间:2013-09-20 04:22:30

标签: antlr4

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]”没有。

1 个答案:

答案 0 :(得分:1)

您可以在ANTLR 4词法分析器中使用字符集,但范围区分大小写。您使用[a-zA-z]我认为您的意思是[a-zA-Z]