2012-03-26 3 views
0

У меня есть дерево синтаксического разбора со мной, теперь я прошел по порядку в дереве разбора и генерируется таблица символов. Но как мне построить АСТ для этого?Здание Аннотация Синтаксическое дерево

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

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

Это все, что мне нужно?

+0

Удивительно, что ваша таблица символов создана, так как вы не можете знать область действия на этом этапе. – Hogan

+0

@Hogan У меня есть дерево синтаксического разбора, что мешает мне узнать масштаб? – Kraken

+1

На данный момент ваша система не должна содержать семантической информации. Вы только что разобрали его. – Hogan

ответ

0

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

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

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

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

(INTArray) -> (ageArray) -> (30)

я думаю.


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

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

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

+0

да мое производство для декларации похоже на Declarstmt -> DECLARE listid: type; Таким образом, моим родительским узлом будет Declarestmt Список детей имеет DECLARE - listid -: -type:; – Kraken

+0

Ах, вы не сказали, что используете генератор компилятора. В этом случае, в порядке и отказаться от ненужных элементов, как вы сказали. – Hogan

+0

что заставило вас сказать, что я использую генератор компилятора, ну, вот что я сделал. Лексический анализ, используя DFA, Подайте поток токенов в синтаксический анализатор, теперь модуль синтаксического анализатора, рассмотрите правила грамматики, а затем оттуда, используя FIRST FOLLOW SETS и метод предсказания разбора LL, я построил парсер. (с использованием стека). Это то, что вы называете генератором компилятора? – Kraken