如何获取声明的变量ANTLR

问题描述 投票:0回答:1

我有以下解析器规则

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");
    }
java antlr
1个回答
0
投票

将以下代码段添加到语法中:

@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)

© www.soinside.com 2019 - 2024. All rights reserved.