Каковы общие стратегии для сведения дерева синтаксического анализа (т. е. конкретного синтаксического дерева) к абстрактному синтаксическому дереву?
Например, у меня есть следующее грамматическое правило:
statement_list : statement
| statement_list statement
который, если оставить его в виде дерева синтаксического анализа, будет генерировать разветвленный вывод, который выглядит как
program
statement_list
statement_list
statement
definition
p_type
assignment
statement
definition
statement
assign
assignment
Если я объединим дочерние элементы каждого узла (поскольку список операторов не имеет внутреннего значения после синтаксического анализа), я могу добиться следующего
program
definition
p_type
assignment
definition
assign
assignment
Это сработало хорошо, однако я не знаю никаких «правил» для этого. Существуют ли определенные правила грамматики, которые я должен упростить? Это вопрос ощущения или есть более механистический процесс?