Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
shpora1_Kalabin.doc
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
755.2 Кб
Скачать
  1. Работа с таблицей символов.

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

Для запоминания описанных идентификаторов и их типов большинство компиляторов пользуется таблицей символов.

Когда описывается идентификатор, например, int a; это называется определяющей реализацией а. Однако а может встречаться и в другом контексте: a=4 или a+b или read(a) здесь имеются прикладные реализации a.

В случае определяющей реализации идентификатора (специфицируемого пользователем типа данных, операции и т. п.),

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

Определяющая реализация идентификатора появляется (текстуально) раньше любой прикладной реализации.

При наличии прикладной реализации идентификатора соответствующая определяющая реализация находится в наименьшем

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

B таблице символов компилятора может содержаться и другая информация об идентификаторе, необходимая во время компиляции, например, его адрес в ходе прогона или в случае константы – ее значение.

Реализация таблиц символов внутри программ возможна либо в виде массива, либо в виде цепочной структуры, в которой каждый элемент содержит ссылку на последующий и, возможно, предыдущий элемент структуры.

Реализация в виде массива

Достоинства такой организации: Быстрое выделение памяти под таблицу символов (происходит один раз при объявлении массива). Экономия места за счет отсутствия необходимости хранить информацию о размещении других элементов массива

Простота реализации методов ускоренного поиска, имитации стека и т.д.

Недостатки: При трансляции небольших программ и малом количестве идентификаторов – неэффективное использование памяти, т.к. большая часть массива остается незанятой При трансляции больших программ может возникнуть ситуация, когда физическая память для размещения информации о переменных имеется, а массив уже полностью заполнен. Соответственно, из-за переполнения трансляция оказывается невозможной.

Реализация в виде цепочной структуры (связанного списка)

Достоинством такой организации является наиболее полное использование ресурсов памяти.

Недостатки:1. Выделение памяти осуществляется значительно медленнее, т.к. производится отдельно под каждый элемент.

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]