Как построить таблицы символов для разных лексических уровней? - PullRequest
3 голосов
/ 30 января 2011

Я нахожусь в процессе создания компилятора для C-подобного языка. Я немного покончил с лексером и парсером. Прямо сейчас я пытаюсь сделать семантический анализ и пытаюсь построить таблицы символов. Теперь, согласно спецификациям, дубликаты объявлений не допускаются на одном и том же лексическом уровне. Это требует построения отдельной таблицы символов для каждого лексического уровня, верно? Как мне это сделать? На данный момент одна таблица символов у меня есть в форме двоичного дерева, где каждый узел выглядит так:

struct tree_el
{
    char *identifier;
    char *type;
    struct tree_el *right, *left;
}

Как указать конкретный узел на «корневой» узел другого дерева?

Любая помощь будет отличной! Большое спасибо.

Ответы [ 2 ]

1 голос
/ 30 января 2011

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

Например:

int i,j,k;

while (i) {
   int q, r, s;

   ...
}

Когда вы анализируете это, вы сначала определите i j и k и добавите их. Затем вы нажмете на оператор while и «нажмите» определения для q r и s. При выходе из области оператора while вы можете «выдавить» q r, s и т. Д.

0 голосов
/ 31 января 2011

Вам необходимо отдельное дерево символов для каждой лексической области, которое содержит только символы, непосредственно определенные в этой области. При поиске символа сначала смотрите в самую глубокую содержащую область, затем в родительскую область и т. Д., Пока не достигнете области файла.

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