我正在使用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))))
答案 0 :(得分:2)
不要操纵解析器创建的树。这代表原始输入。取而代之,应用简化转换并生成 new 树,该树的格式可能易于从中生成新代码,而不是使用原始树结构。