Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Antlr4解析树添加到另一个Antlr4解析树_Antlr4 - Fatal编程技术网

将Antlr4解析树添加到另一个Antlr4解析树

将Antlr4解析树添加到另一个Antlr4解析树,antlr4,Antlr4,我需要用Antlr4实现泛型。为了做到这一点,我需要能够获取一个类,并在使用它时,像宏一样为它动态生成代码,标记该代码,生成一个树,然后将新树添加到原始解析树中 我看过这两节课 但是,我不确定它们实际上做了什么,也不确定如何使用构造函数 ParserRuleContext(ParserRuleContext父级,int invokingStateNumber) RuleContext(RuleContext父级,int invokingState) 具体地说,这些类是表示新树的类吗?我应该传

我需要用Antlr4实现泛型。为了做到这一点,我需要能够获取一个类,并在使用它时,像宏一样为它动态生成代码,标记该代码,生成一个树,然后将新树添加到原始解析树中

我看过这两节课

但是,我不确定它们实际上做了什么,也不确定如何使用构造函数

ParserRuleContext(ParserRuleContext父级,int invokingStateNumber)

RuleContext(RuleContext父级,int invokingState)


具体地说,这些类是表示新树的类吗?我应该传递什么到invokingState/invokingStateNumber中?

显然就这么简单

在遍历第一棵树时,它会正确显示两个文件中的信息

    public class Program
    {
            private static ParserRuleContext getTree(String file) throws Exception
            {
                    InputStream input = new FileInputStream(file);
                    Reader reader = new InputStreamReader(input);
                    ANTLRInputStream inputStream = new ANTLRInputStream(reader);

                    JavaLexer lexer = new JavaLexer(inputStream);
                    CommonTokenStream tokens = new CommonTokenStream(lexer);
                    JavaParser parser = new JavaParser(tokens);
                    ParserRuleContext tree = parser.compilationUnit(); // parse

                    return tree;
            }

            public static void main(String args[]) throws Exception
            {
                    ParserRuleContext tree1 = getTree("E:\\Users\\nessy\\IdeaProjects\\AntlrTest\\src\\in1.java");
                    ParserRuleContext tree2 = getTree("E:\\Users\\nessy\\IdeaProjects\\AntlrTest\\src\\in2.java");

                    tree1.addChild(tree2);

                    ParseTreeWalker walker = new ParseTreeWalker(); // create standard walker
                    JavaWalker extractor = new JavaWalker();
                    walker.walk(extractor, tree1); // initiate walk of tree with listener
            }
    }

通常,Antlr4不支持直接修改解析树。如果你能更详细地了解你要做的事情,那么最好备份一个步骤,询问在哪里以及如何实现泛型。遗憾的是,除了使用这种方法,没有其他方法来实现泛型。我想我将深入到构造函数中,并尝试找出int参数的作用>:o。