Разбор арифметического выражения и построение из него дерева в Java

Мне нужна была помощь в создании пользовательских деревьев с учетом арифметического выражения. Скажем, например, вы вводите это арифметическое выражение:

(5+2)*7

Дерево результатов должно выглядеть так:

    *
   / \
  +   7
 / \
5   2

У меня есть несколько настраиваемых классов для представления различных типов узлов, например PlusOp, LeafInt и т. Д. Мне не нужно оцените выражение, просто создайте дерево, чтобы я мог позже выполнять с ним другие функции. Кроме того, отрицательный оператор '-' может иметь только один дочерний элемент, и для представления '5-2' вы должны ввести его как 5 + (-2).

Для обеспечения каждого типа потребуется некоторая проверка выражения. оператора имеет правильный номер. аргументов / дочерних элементов каждая открывающая скобка сопровождается закрывающей скобкой.

Кроме того, я, вероятно, должен упомянуть, что мой друг уже написал код, преобразующий входную строку в стек токенов, если это будет полезно для этого.

Буду признателен за любую помощь. Спасибо :)

(Я читал, что вы можете написать грамматику и использовать antlr / JavaCC и т.д. для создания дерева синтаксического анализа, но я не знаком с этими инструментами или с написанием грамматик, поэтому, если это ваше решение, я Буду признателен, если вы предоставите им полезные уроки / ссылки. fin = n: f (i + 2) (n + i) может кто-нибудь объяснить мне, что он делает. Я знаю, что он возвращает [0,1,4,9,16 ..], но я не понимаю, как и что означает n: f

f :: Integer -> Integer -> [Integer]
f i n = n : f (i+2) (n+i)

, может кто-нибудь объяснить мне, что он делает. Я знаю, что он возвращает [0,1,4,9,16 ..], но я не понимаю, как и что n: f означает

9
задан Bill the Lizard 16 September 2012 в 22:31
поделиться