5

Каковы общие стратегии сокращения дерева синтаксического анализа (т. Е. Конкретного дерева синтаксиса) в абстрактное синтаксическое дерево?Как уменьшить дерево синтаксического анализа в абстрактное синтаксическое дерево?

К примеру, у меня есть следующие правила грамматики:

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 

Это сработало хорошо - однако я не знаю никаких «правил» для этого. Существуют ли конкретные правила грамматики, которые я должен упростить? Это вопрос, или есть более механистический процесс?

+1

Вы можете пойти на мягкий «внешний вид», но это в основном большая работа. Вы можете сделать это по существу механически, удалив узлы, которые вы можете восстановить, используя грамматику. См. Http://stackoverflow.com/a/1916687/120163 –

ответ

3

Это не вопрос «чувствовать». Абстрактное синтаксическое дерево зависит от значения (семантики) того, что было проанализировано, и я думаю, что это были бы правила:

  1. Удалить узлы для токенов, которые не добавляют значения. Это промежуточные ключевые слова (например, «then»), разделители (например, запятая) и скобки (например, скобки).
  2. Содействовать значимым жетонам (например, «если»), чтобы быть родителем других токенов в том же правиле.

Существует не один рецепт. Это зависит от того, что означают фразы на целевом языке.

+0

Я ценю ответ, но похоже, что вы противоречите себе. Вы говорите, что «это не вопрос« чувствовать », но ваши правила зависят от языка. Если бы были какие-то показатели, то я бы согласился, что это не вопрос чувств, но, как он выражается, это, безусловно, так. – sdasdadas

+0

Я признаю, что каждый день дизайн (в частности, дизайн языка) - это 50/50 инженерных решений. Это хорошо? – Apalala

+0

Да, конечно, извините - я забыл вернуться к этому вопросу. Спасибо за помощь. – sdasdadas

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