我的语法规则如下:
expr : ENUMFILED IN '(' ENUMVALUE (',' ENUMVALUE)* ')' ;
ENUMFILED : 'color' | 'food' | 'car';
ENUMVALUE : (ALPHANUMERIC)+;
DIGIT : '0'..'9' ;
LETTER : ('a'..'z' | 'A'..'Z');
ALPHANUMERIC: (DIGIT | LETTER | '_');
所以我可以解析像:
这样的东西car in (ford,toyota)
color in (red,blue,green)
在代码中,我想将这些值从in
子句转换为枚举。对于每个组,我都有一个Enum类型,例如:
enum Car { FORD, TOYOTA, HONDA };
enum Color { RED, YELLOW, BLUE };
我稍后会用ParseTreeWalker
多次遍历表达式,所以我想在解析它们时将值转换为枚举。这样做的好方法是什么?
请注意,我的语法还有很多,所以我可以在输入中多次出现相同的字段:例如car in (ford,toyota) .... car in (honda)
答案 0 :(得分:0)
最好在枚举类中使用Map:
public enum Car {
TOYOTA( "Toyota" ), PORSCHE( "Porsche" ),...
...
private static Map<String,Car> s2car;
public static String transCar( String s ){
return s2car.get( s );
}
Car( String s ){
s2car.put(s,this);
}
}