Как вы управляете деревом, созданным с помощью ANTLR? - PullRequest
0 голосов
/ 13 апреля 2019

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

1 Ответ

2 голосов
/ 14 апреля 2019

Не манипулируйте деревом, которое было создано вашим парсером. Это представляет исходный ввод. Вместо этого примените упрощенное преобразование и сгенерируйте новое дерево, возможно, в формате, который облегчает создание нового кода, вместо использования исходной древовидной структуры.

...