Нужно написать разбор выражения(к примеру 1*(2+3)). По "слухам" вышел на то, что нужно написать решать эту задачу через "двоичное дерево". Подскажите где про него можно почитать поподробнее?
ps: Решение нужно написать на C#.Net
Здравствуйте, <Аноним>, Вы писали:
А>Нужно написать разбор выражения(к примеру 1*(2+3)). По "слухам" вышел на то, что нужно написать решать эту задачу через "двоичное дерево". Подскажите где про него можно почитать поподробнее?
А>ps: Решение нужно написать на C#.Net
Абстрактное синтаксическое дерево... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Здравствуйте, Аноним, Вы писали:
в .NET начиная с 3.5 есть пространство имен System.Linq.Expressions, которое предоставляет функции API для создания деревьев выражений. Не уверен ваш ли это случай, но в любом случае полезно будет почитать.
Общая информация
Деревья выражений
Более конкретный пример
Практическое руководство. Реализация обхода дерева выражения
В этой реализации обхода дерева выражения метод Visit, который должен быть вызван первым, направляет переданное выражение в один или несколько специализированных методов обхода в классе, основываясь на типе выражения. Специализированные методы обхода служат для обхода поддерева выражения, которому они были переданы. Если вложенное выражение меняется после обхода, например посредством переопределения метода в производном классе, специализированные методы обхода создают новое выражение, которое включает изменения в поддереве. В противном случае они возвращают выражения, которое было им передано. Это рекурсивное поведение позволяет построить новое дерево выражения, которое является той же или измененной версией исходного выражения, переданного в Visit.
Здравствуйте, Аноним, Вы писали:
А>Нужно написать разбор выражения(к примеру 1*(2+3)). По "слухам" вышел на то, что нужно написать решать эту задачу через "двоичное дерево". Подскажите где про него можно почитать поподробнее?
Поподробнее — у
Ахо и Ульмана.
Побыстрее — там же (в самом начале есть пример того, что тебе надо, на C).