Формальные языки, грамматики и основы построения трансляторов. Кревский И.Г - 84 стр.

UptoLike

84
14. РАБОТА С ТАБЛИЦЕЙ СИМВОЛОВ
Поскольку синтаксический анализатор обычно использует контекстно-
свободную грамматику, необходимо найти метод определения контекстно-
зависимых частей языка. Например, во многих языках идентификаторы не
могут применяться, если они не описаны, также имеются ограничения в
отношении способов употребления в программе значений различных типов.
Для запоминания описанных идентификаторов и их типов большинство
компиляторов пользуется таблицей
символов.
Когда описывается идентификатор, например,
int a;
это называется определяющей реализацией а. Однако а может
встречаться и в другом контексте:
a=4 или a+b или read(a)
здесь имеются прикладные реализации a.
В случае определяющей реализации идентификатора
(специфицируемого пользователем типа данных, операции и т. п.),
компилятор помещает объект в таблицу символов. В случае
прикладной
реализации в таблице символов осуществляется поиск элемента,
соответствующего определяющей реализации объекта, чтобы узнать его тип
и (возможно) другие признаки, требующиеся во время компиляции.
Во многих языках один и тот же идентификатор может использоваться
для представления в разных частях программы различных объектов. В таких
случаях структура программы помогает различать эти объекты
, например
{
int a;
...
}
...
{
char a;
...
}
                                                                         84
                  14.   РАБОТА С ТАБЛИЦЕЙ СИМВОЛОВ
      Поскольку синтаксический анализатор обычно использует контекстно-
свободную грамматику, необходимо найти метод определения контекстно-
зависимых частей языка. Например, во многих языках идентификаторы не
могут применяться, если они не описаны, также имеются ограничения в
отношении способов употребления в программе значений различных типов.
Для запоминания описанных идентификаторов и их типов большинство
компиляторов пользуется таблицей символов.
      Когда описывается идентификатор, например,
                                    int a;
      это называется определяющей реализацией         а. Однако а может
встречаться и в другом контексте:
      a=4 или      a+b или read(a)
здесь имеются прикладные реализации a.
      В      случае      определяющей        реализации    идентификатора
(специфицируемого пользователем типа данных, операции и т. п.),
компилятор помещает объект в таблицу символов. В случае прикладной
реализации    в    таблице   символов   осуществляется    поиск   элемента,
соответствующего определяющей реализации объекта, чтобы узнать его тип
и (возможно) другие признаки, требующиеся во время компиляции.
      Во многих языках один и тот же идентификатор может использоваться
для представления в разных частях программы различных объектов. В таких
случаях структура программы помогает различать эти объекты, например
{
    int a;
    ...
}
...
{
  char a;
  ...
}