Я создаю систему компьютерной алгебры с использованием 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))))