Построение абстрактного синтаксического дерева - PullRequest
0 голосов
/ 26 марта 2012

У меня есть дерево синтаксического анализа, теперь я перебрал порядок в дереве синтаксического анализа, и также сгенерирована таблица символов. Но как мне построить AST для этого?

Вот что я собрал (некоторые ненадежные ресурсы):

  • В вашем дереве разбора вы входите в Порядок I.e Возьмите самого левого ребенка, потом родителя, а затем список других детей.
  • Если вы сталкиваетесь с чем-то вроде SEMICOL, Parenthesis, не добавляйте его в AST, если у узла только один дочерний элемент, удалите этот узел и используйте вместо него дочерний.

Это все, что мне нужно сделать?

1 Ответ

0 голосов
/ 26 марта 2012

Обновление на основе комментария

В вашем примере дерево разбора может содержать узел оператора, подобный этому

(int) -> (ageArray) -> ([) -> (30) -> (]) -> (;)

Профессор ожидает что-то вроде

(intArray) -> (ageArray) -> (30)

Я думаю.


Вы делаете решение простым. Это не просто вопрос обхода вашего дерева и выбрасывания чего-то. AST представляют собой конструкции языка программы. Чтобы построить AST, сначала нужно спроектировать, как будет выглядеть AST.

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

Вы должны спроектировать, как будут выглядеть все элементы, основываясь на языке, который вы компилируете. Если у вас есть такой дизайн, то часто используется лексер в дереве разбора для генерации AST.

...