如何获取声明的变量 ANTLR
How to get the declared variables ANTLR
我有以下解析器规则
study: 'study' '(' ( assign* | ( assign (',' assign)*) ) ')' NEWLINE;
assign: ID '=' (INT | DATA );
INT : [0-9]+ ;
DATA : '"' ID '"' | '"' INT '"';
ID : [a-zA-Z]+ ;
我现在的问题是如何在 entryStudy 方法中检索研究中定义的变量
@Override
public void enterStudy(StudyParser.StudyContext ctx) {
// get the declared variables
// study(hello = "hello",world = "world")
// study(hello = "hello",world = "world",name = "name")
System.out.println("enterStudy");
}
将以下片段添加到您的语法中:
@members {
public final java.util.List<java.util.Map.Entry<String, String>> parameters = new java.util.ArrayList<>();
}
修改您的分配规则:
assign: name=ID '=' value=(INT | DATA ) {
parameters.add(new java.util.AbstractMap.SimpleImmutableEntry($name.text, $value.text));
};
现在您可以使用 StudyParser.parameters
字段访问所需信息:
StudyParser parser = ...;
parser.study();
System.out.println(parser.parameters);
另请注意,您的语法可能略有错误,因为它允许以下输入:study(x=1y=2)
.
我有以下解析器规则
study: 'study' '(' ( assign* | ( assign (',' assign)*) ) ')' NEWLINE;
assign: ID '=' (INT | DATA );
INT : [0-9]+ ;
DATA : '"' ID '"' | '"' INT '"';
ID : [a-zA-Z]+ ;
我现在的问题是如何在 entryStudy 方法中检索研究中定义的变量
@Override
public void enterStudy(StudyParser.StudyContext ctx) {
// get the declared variables
// study(hello = "hello",world = "world")
// study(hello = "hello",world = "world",name = "name")
System.out.println("enterStudy");
}
将以下片段添加到您的语法中:
@members {
public final java.util.List<java.util.Map.Entry<String, String>> parameters = new java.util.ArrayList<>();
}
修改您的分配规则:
assign: name=ID '=' value=(INT | DATA ) {
parameters.add(new java.util.AbstractMap.SimpleImmutableEntry($name.text, $value.text));
};
现在您可以使用 StudyParser.parameters
字段访问所需信息:
StudyParser parser = ...;
parser.study();
System.out.println(parser.parameters);
另请注意,您的语法可能略有错误,因为它允许以下输入:study(x=1y=2)
.