Как сгенерировать синтаксическое дерево для конкретного предложения типа a+b*c, где id->a|b|c?
Рассмотрим грамматику: E-> E+E|EE|E*E|E/E|(E)|id
Я пытался по крайней мере 5 часов, чтобы решить эту проблему, но не смог. Пожалуйста, скажите мне,
в чем идея решить эту проблему?
Как это реализовать?
1 ответ
Решение
Синтаксическое дерево строится путем синтаксического анализа, который в некотором смысле применяет грамматику в обратном порядке. Итак, вы видите, что a, b и c могут исходить только от id, который, в свою очередь, может исходить только от E. Теперь вы находитесь в E+E*E. Вы можете сначала уменьшить E + E или E*E, а затем другой. В результате E является корнем дерева. Это одно из двух возможных синтаксических деревьев (первое сокращающее E*E)
E
/| \
E + E
| /|\
id E * E
| | |
a id id
| |
b c
Что касается реализации, вам нужно будет указать, где и с какой целью вы хотите реализовать это.