Реализация синтаксического дерева Abstrac - PullRequest
0 голосов
/ 09 марта 2011

Я работаю над компилятором для mini c #. Таблица символов готова, и все, что я знаю о следующем этапе, - это создание абстрактного синтаксического дерева. Итак, мои вопросы: 1. Зачем мне абстрактное синтаксическое дерево, когда у меня уже есть таблица символов, которая может содержать гораздо больше информации, чем синтаксическое дерево. 2. Какие атрибуты должен содержать узел AST? Наконец, если кто-то знает книгу или какую-либо ссылку, которую я мог бы использовать, пожалуйста, дайте мне знать.

1 Ответ

1 голос
/ 23 марта 2011

1) Ну, таблица символов (ST) может содержать только статическую информацию о символах. Но чтобы собрать эту информацию, нужно понять синтаксическое положение символов в выражении или команде.

Так, например, если ваш лексический анализатор сообщает вам, что он обнаружил токен типа, вам нечего делать в ST. Затем он может найти вас "идентификатор". Таким образом, int i; может быть командой. Вы должны поместить в свой ST целочисленную переменную. Но если последовательность int i();, вам нужно определить свой идентификатор i как функцию, которая возвращает int.

Я совершенно сбит с толку, как у вас уже может быть ST без AST, потому что именно так выполняется ST.

2) В общем, AST не содержит информацию о символах. Само положение символов в дереве является его наиболее ценной информацией. Так что если вы видите что-то вроде:

int main(void)
{
  int i=0;
  if(i==0)
  {
    int i=1;
    printf("i=%d\n", i);
  }
  printf("i=%d\n", i);
}

Поскольку позиция второго i в AST, ниже дерева, внутри «if», вы можете указать своему ST, что у него 2 i, и что они являются различными переменными. То, о чем вы не можете догадаться заранее, пока не создадите дерево со всеми символами.

Береги себя, Бек

PS. Отредактировано: Лучшая книга, которую я использую:

Компиляторы: принципы, методы и инструменты с градиентом (pkg) (2-е издание) Альфред В. Ахо, Моника С. Лам, Рави Сетхи, Джеффри Д. Уллман Издатель: Эддисон Уэсли; 2 издание (15 октября 2007 г.) ISBN-10: 0321547985 ISBN-13: 978-0321547989

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...