你如何操纵用ANTLR生成的树?

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

我正在使用ANTLR创建一个计算机代数系统。到目前为止,我已经能够生成树并从树中读取信息。现在我需要通过读取树的叶节点来实现代数简化,检测它们是否可以简化,然后简化它们。

有没有方法可以更改叶节点的值并删除它们?

这是我的代码和输出生成:

import java.io.FileInputStream;
import java.io.IOException;
import org.antlr.v4.runtime.*;
import org.antlr.v4.runtime.tree.*;
import org.omg.CORBA.portable.InputStream;

public class CAS {

    public static void main(String[] args) throws IOException {

        FileInputStream inputstream = new FileInputStream("d:\\input.txt");
        CharStream cs = CharStreams.fromStream(inputstream);

        HelloLexer lexer = new HelloLexer(cs);
        CommonTokenStream tokens = new CommonTokenStream(lexer);

        System.out.println("Tokens:");
         tokens.fill();
         for (Token token : tokens.getTokens())
         {
             System.out.println(token.toString());
         }

         HelloParser parser = new HelloParser(tokens);
         ParseTree tree = parser.expr();

         System.out.println("\nParse tree (Lisp format):");
         System.out.println(tree.toStringTree(parser));
    }
}
//Output
Tokens:
[@0,0:0='2',<8>,1:0]
[@1,1:1='x',<9>,1:1]
[@2,2:2='+',<4>,1:2]
[@3,3:3='3',<8>,1:3]
[@4,4:3='<EOF>',<-1>,1:4]

Parse tree (Lisp format):
(expr (expr (factor (term 2) (factor (term x)))) + (expr (factor (term 3))))
java antlr4
1个回答
2
投票

不要操纵解析器创建的树。这代表原始输入。而是应用简化转换并生成一个新树,可能采用一种格式,使其易于生成新代码,而不是使用原始树结构。

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