Мне нужна была помощь в создании пользовательских деревьев с учетом арифметического выражения. Скажем, например, вы вводите это арифметическое выражение:Анализ арифметического выражения и построение дерева из него в Java
(5+2)*7
В результате дерево должно выглядеть следующим образом:
*
/\
+ 7
/\
5 2
У меня есть некоторые пользовательские классы для представления различных типов узлов, т.е. PlusOp, LeafInt, и т. д. Мне не нужно оценивать выражение, просто создайте дерево, чтобы впоследствии я мог выполнять другие функции. Кроме того, отрицательный оператор «-» может иметь только один ребенок, а для представления «5-2» вы должны ввести его как 5 + (-2).
Некоторая валидация в выражении будет необходима для обеспечения правильности каждого типа оператора. аргументов/детей, каждая открывающая скобка сопровождается закрывающей скобкой.
Кроме того, я должен, вероятно, упомянуть, что мой друг уже написал код, который преобразует входную строку в стек токенов, если это будет полезно для этого.
Буду признателен за любую помощь. Спасибо :)
(Я читал, что вы можете написать грамматику и использовать antlr/JavaCC и т. Д., Чтобы создать дерево синтаксического разбора, но я не знаком с этими инструментами или с грамматикой записи, поэтому, если это ваше решение, Я был бы признателен, если бы вы могли предоставить некоторые полезные руководства/ссылки для них.)
Я должен добавить, что я также буду делать аналогичную вещь для логических выражений (например, ¬A V B). – ChocolateBear
См. Мой ответ SO о том, как создать рекурсивный синтаксический анализатор спуска, что очень удобно для выражений. Этот ответ ссылается на второй, который показывает, как строить деревья с таким парсером. http://stackoverflow.com/questions/2245962/is-there-an-alternative-for-flex-bison-that-is-usable-on-8-bit-embedded-systems/2336769#2336769 –