Как мне сгенерировать список команд для оценки математического выражения на стековой машине, используя деревья разбора и токенизатор?

Поэтому я пытаюсь создать класс CalcParser, который при задании математического выражения генерирует строку, содержащую команды для оценки выражения на стековой машине. Например, 1+2*3 должно вывести:

нажмите 1.0
пуш 2.0
пуш 3.0
умножать
добавлять

Кроме того, скобки должны соблюдаться. Итак, (1+2)*3 должно вывести:

нажмите 1.0
пуш 2.0
добавлять
пуш 3.0
умножать

Я работаю с уже существующим классом CalcLexer, который содержит анализируемую строку и преобразует ее в серию токенов, используя java.util.StringTokenizer, Единственная часть информации, необходимая для этого класса, это операторы \t\n\r+-*/() и пробелы, которые также считаются отдельными токенами.

Вот мой вопрос Если бы я использовал деревья разбора для генерации выходного кода, как бы я учел скобки, так как выражение внутри скобок всегда будет выполняться первым? Вот то, что я пока parseRootexp() метод, и у меня есть ощущение, что я немного не в себе:

private double value;
private CalcLexer lexer = new CalcLexer();
private void parseRootexp(){
    if (lexer.nextToken() == '('){
        match('(');
        do{
            lexer.nextToken();
            if (lexer.nextToken() == CalcLexer.NUMBER_TOKEN){
                value = lexer.getNum();
                System.out.println("push " + value + "\n");
            }   
        } while (lexer.nextToken() != ')');
    }
}

match(int token) Метод используется просто для сопоставления текущего токена с допустимым символом терминала. Если нет, возвращается ошибка. Я знаю, что это далеко от того, что я хочу в идеале, но мне нужно что-то, чтобы подтолкнуть меня в правильном направлении. Заранее спасибо.

0 ответов

Другие вопросы по тегам