Cтраница 2
Этот стандартный символ указывает элемент таблицы идентификаторов. На какой элемент он указывает. Может так случиться, что одному имени идентификатора будут соответствовать два элемента таблицы идентификаторов. В В1 идентификатор Y обозначает двоичное целое число; в В2 - символьную строку, а в ВЗ - битовую строку. Лексическая фаза не - может по стандартному символу различить эти Y, поскольку она ничего не знает о декларациях и блоках. Поэтому все, что может сделать лексическая фаза - это поместить имена переменных в таблицу имен. [16]
Каким должно быть смещение для 32-элементной таблицы идентификаторов, если для доступа в нее используется метод хеширования. [17]
Фаза распределения памяти вначале просматривает таблицу идентификаторов, выделяя каждому элементу статическую память. При этом используется счетчик адреса с нулевым начальным значением, которое затем меняется по мере распределения памяти. [18]
Указание о длине помещается во все элементы таблицы идентификаторов. Поле длины используется фазой генерации кода для создания соответствующего кода ( например, А. Таким образом, шаги с 1 по 3, примененные к нашему примеру, в результате дают таблицу идентификаторов, показанную на рис. 8.32. Читатель сам может определить длину и адрес. [19]
Заметим, что значением всех переменных в таблице идентификаторов являются двоичные числа с фиксированной точкой. Так что каждой из них отводится отдельное слово. Литералами являются десятичные числа, а в Системе 360 они хранятся в упакованном виде, по две цифры в байте. Элемент матрицы явно указывает, что литеральная область памяти состоит из трех байтов и что при генерации кода эта область должна быть заполнена значениями литералов, взятыми в таблице литералов. [20]
Ниже представлен фрагмент программы на RITRANe, Описана таблица идентификаторов. Строки таблицы состоят из трех полей: идентификатор ( ID), тип идентификатора ( TYP) и адрес ( ADDR), присвоенный идентификатору. Регистр RID содержит идентификатор; счетчик CTYP содержит внутреннее значение типа идентификатора; счетчик CADDR содержит текущее значение счетчика адреса программы. В этом фрагменте идентификатор вместе со своими характеристиками записывается в таблицу. [21]
Смещение может быть найдено из элемента В в таблице идентификаторов. Номер регистра базы выбирается произвольно; однако, фаза генерации кода должна производить код, который загружает в этот регистр базы адрес начала области статической памяти. [22]
Создают новые элементы матрицы или добавляют атрибуты данных в таблицу идентификаторов. В первом случае программы должны обладать способностью определять операции и операнды и помещать их в матрицу. Во втором случае они должны иметь точную информацию о том, какие именно атрибуты были декларированы, и помещать их в таблицу идентификаторов. В обоих случаях сложность программ интерпретации зависит от того, какая часть работы возложена на редукции. [23]
![]() |
Представление структуры данных. [24] |
Запоминает информацию, содержащуюся в декларации структуры, в таблице идентификаторов. [25]
Когда встречается обращение к такой переменной, фаза интерпретации просматривает таблицу идентификаторов в поисках идентификатора, описанного в этом блоке или в ближайшем внешнем, и затем заменяет этот идентификатор соответствующим стандартным символом. Используя предложенную схему, можно кратко описать реализацию такого свойства языка. [26]
Фаза распределения памяти должна заполнить поле длины и адреса в таблице идентификаторов. Она также заводит соответствующие элементы в матрице, чтобы показать, что память выделена и в нее занесено начальное значение. Для структуры нашего примера и для машин типа Системы 360, где мы можем определить базовый регистр, содержащий базу структуры, память может выделяться последовательно. [27]
![]() |
Представление лексических правил в БНФ. [28] |
После того как лексическая единица классифицирована как возможный идентификатор, опрашивается таблица идентификаторов. Если этой лексической единицы в таблице нет, то создается новый элемент. Поскольку из атрибутов идентификатора нам известно только его имя, то только оно и заносится в таблицу. Остальная информация определяется и заносится последующими фазами. Не зависимо от того, был создан новый элемент в таблице идентификаторов или нет, создается стандартный символ типа IDN и помещается в таблицу стандартных символов. [29]
Рассмотрим вначале обработку описаний типа, основная задача которой - формирование таблицы идентификаторов. [30]