Мне нужна была помощь в создании пользовательских деревьев с учетом арифметического выражения. Скажем, например, вы вводите это арифметическое выражение:
(5+2)*7
Дерево результатов должно выглядеть так:
*
/ \
+ 7
/ \
5 2
У меня есть некоторые пользовательские классы для представления различных типов узлов, то есть PlusOp, LeafInt и т.д. Мне не нужно оценивать выражение, просто создайте дерево, чтобы впоследствии я мог выполнять другие функции. Кроме того, отрицательный оператор "-" может иметь только один ребенок и представлять "5-2", вы должны ввести его как 5 + (-2).
Некоторая валидация выражения будет необходима для обеспечения правильности каждого типа оператора. аргументов/детей, каждая открывающая скобка сопровождается закрывающей скобкой.
Кроме того, я должен, вероятно, упомянуть, что мой друг уже написал код, который преобразует входную строку в стек токенов, если это будет полезно для этого.
Буду признателен за любую помощь. Спасибо:)
(Я читал, что вы можете написать грамматику и использовать antlr/JavaCC и т.д., чтобы создать дерево синтаксического анализа, но я не знаком с этими инструментами или с написанием грамматик, поэтому, если это ваше решение, благодарны, если вы можете предоставить для них полезные советы/ссылки.)