2016-07-27 3 views
0

Каково использование создания дерева разбора для кода? Это может показаться глупым, но я просто не могу понять, как это работает. Я понимаю, что он может быть полезен в арифметических операциях для учета приоритетов. Но зачем конвертировать код в дерево? И что происходит после этого? Кажется, я не понимаю, что я могу сделать с деревом разбора. Я пытаюсь написать очень маленький интерпретатор, который выполняет арифметические операции и простые условия. Я написал небольшую грамматику. У меня есть дерево разбора. Но не знаю, что с этим делать.Какова цель создания дерева синтаксического анализа?

+1

Возможный дубликат [Как используются деревья синтаксического анализа?] (Http://stackoverflow.com/questions/38516485/how-are-parse-trees-used) – rici

+0

Проще всего это понять, посмотрев, как калькулятор RPN работает. RPN похож на сплющенную парсету (по крайней мере, для простых математических выражений) –

ответ

3

Ну, если у вас есть дерево синтаксического анализа, и вы хотите закончить переводчика, то вы делаете это вы Оцените дерево, рекурсивно.

Чтобы оценить блок кода, вы каждый раз оцениваете каждое из своих утверждений.

Чтобы оценить оператор if, вы оцениваете выражение условия и в зависимости от результата вы вычисляете ветвь then или ветвь else (если она существует).

Чтобы оценить дополнение, вы оцениваете каждый операнд, а затем добавляете их вместе.

Наличие синтаксического дерева означает, что эти операции являются естественными, они обычно включают в себя оценку (некоторые из) дочерних узлов текущего узла, а затем, возможно, объединение результатов вместе.

Смежные вопросы