Antlr4 如何获取ANTLR声明中的变量类型

Antlr4 如何获取ANTLR声明中的变量类型,antlr4,Antlr4,我正在用ANTLR开发一个DSL,在赋值规则中,我想知道变量的类型是我的语法 assign: name = ID '=' value = ( INT |STRING | DATE ) { // get type here parameters.add(new java.util.AbstractMap.SimpleImmutableEntry($name.text, $value.text));

我正在用ANTLR开发一个DSL,在赋值规则中,我想知道变量的类型是我的语法

assign: name = ID '=' value = ( INT  |STRING | DATE )
            {
                // get type here
                parameters.add(new java.util.AbstractMap.SimpleImmutableEntry($name.text, $value.text));
            };

我建议不要把语法和代码混在一起,而是在监听器中这样做:

@覆盖
公共无效enterAssign(StudyParserParser.AssignContext ctx){
String id=ctx.name.getText();
字符串值=ctx.value.getText();
开关(ctx.value.getType()){
案例研究parserlexer.INT:
System.out.println(id+”是一个INT:“+值);
打破
案例研究parserlexer.STRING:
System.out.println(id+”是一个字符串:“+值”;
打破
案例研究parserlexer.DATE:
System.out.println(id+”是日期:“+值”;
打破
违约:
抛出新的RuntimeException(“未知类型:“+ctx.value.getType()+”,值:“+value”);
}
}

我建议不要把语法和代码混为一谈,而是在监听器中这样做:

@覆盖
公共无效enterAssign(StudyParserParser.AssignContext ctx){
String id=ctx.name.getText();
字符串值=ctx.value.getText();
开关(ctx.value.getType()){
案例研究parserlexer.INT:
System.out.println(id+”是一个INT:“+值);
打破
案例研究parserlexer.STRING:
System.out.println(id+”是一个字符串:“+值”;
打破
案例研究parserlexer.DATE:
System.out.println(id+”是日期:“+值”;
打破
违约:
抛出新的RuntimeException(“未知类型:“+ctx.value.getType()+”,值:“+value”);
}
}