Каково использование создания дерева разбора для кода? Это может показаться глупым, но я просто не могу понять, как это работает. Я понимаю, что он может быть полезен в арифметических операциях для учета приоритетов. Но зачем конвертировать код в дерево? И что происходит после этого? Кажется, я не понимаю, что я могу сделать с деревом разбора. Я пытаюсь написать очень маленький интерпретатор, который выполняет арифметические операции и простые условия. Я написал небольшую грамматику. У меня есть дерево разбора. Но не знаю, что с этим делать.Какова цель создания дерева синтаксического анализа?
0
A
ответ
3
Ну, если у вас есть дерево синтаксического анализа, и вы хотите закончить переводчика, то вы делаете это вы Оцените дерево, рекурсивно.
Чтобы оценить блок кода, вы каждый раз оцениваете каждое из своих утверждений.
Чтобы оценить оператор if
, вы оцениваете выражение условия и в зависимости от результата вы вычисляете ветвь then
или ветвь else
(если она существует).
Чтобы оценить дополнение, вы оцениваете каждый операнд, а затем добавляете их вместе.
Наличие синтаксического дерева означает, что эти операции являются естественными, они обычно включают в себя оценку (некоторые из) дочерних узлов текущего узла, а затем, возможно, объединение результатов вместе.
Возможный дубликат [Как используются деревья синтаксического анализа?] (Http://stackoverflow.com/questions/38516485/how-are-parse-trees-used) – rici
Проще всего это понять, посмотрев, как калькулятор RPN работает. RPN похож на сплющенную парсету (по крайней мере, для простых математических выражений) –