Что такое идентификатор?
Что такое идентификатор?
Помимо неоднозначностей в синтаксисе быстро обнаружились другие неприятности. На примерах их показать сложнее, так что придется рассказывать словами.
Синтаксис языка Си++ неудобен еще и в другом отношении. Если говорить коротко, то прямое использование в формальном описании одного из базовых синтаксических понятий?—?идентификатора?—?приводит к тому, что YACC расценивает грамматику языка как некорректную и на ее основе не может построить синтаксический анализатор. Для традиционных языков синтаксическому анализатору для разбора конструкции достаточно информации о том, что в данной позиции этой конструкции может (или должен) находиться идентификатор. Более простые языки сконструированы так, что семантика идентификатора не влияет на корректность синтаксического разбора. Вид программной сущности, обозначаемой этим идентификатором (подпрограмма, переменная, имя типа, исключение, метка и т.п.), смысл данного конкретного вхождения (объявление или использование)?—?все это выявляется далее, как правило, являясь предметом следующей фазы компиляции?—?семантического анализа.
Для языка Си++ такая схема не проходит. Чтобы быть в состоянии синтаксически распознать многие конструкции, требовалась семантическая интерпретация имени. Иными словами, на вход синтаксическому анализатору следовало поставлять не абстрактную лексему "идентификатор", а результат анализа того, что именно представляет собой этот идентификатор: "имя типа", "новое имя в объявлении", "имя не-типа в выражении" и т.д. Заметим, что синтаксическому анализатору для Java?—?непосредственного потомка Си++?—?вполне хватает понятия идентификатора без каких-либо уточнений.
Всего для Си++ получилось около десятка таких "суперлексем", а лексема "идентификатор" вообще исчезла из синтаксиса. Понятно, что лексический анализатор, который и поставляет лексемы, пришлось наделить дополнительным "интеллектом". Теперь он должен был не просто выделять из текста программы очередную лексему, но и обращаться в таблицы трансляции за информацией о том, что за идентификатор он выловил. Реально эти действия выполняет отдельный модуль, названный "расширенным лексическим анализатором". Введение дополнительного модуля не привело к усложнению компилятора в целом, так как идентификация имен так или иначе должна производиться; мы просто перенесли ее на более ранний этап компиляции. А синтаксис заметно упростился, стал более наглядным, информативным и в конечном счете более эффективным.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
10.2.1. Идентификатор процесса и происхождение
10.2.1. Идентификатор процесса и происхождение Два из наиболее фундаментальных атрибутов — это идентификатор процесса (process ID), или pid, а также идентификатор его родительского процесса. Идентификатор pid — это положительное целое число, которое уникально идентифицирует
10.2.3. Идентификатор uid файловой системы
10.2.3. Идентификатор uid файловой системы В очень специальных случаях программе может понадобиться сохранять свои права root для всего, кроме доступа к файловой системе, при котором она использует пользовательский uid. Изначально использовавшийся в Linux NFS-сервер пространства
Идентификатор сессии
Идентификатор сессии Итак, идентификатор сессии является именем временного хранилища, которое будет использовано для хранения данных сессии между запусками сценария. Один SID - одно хранилище. Нет SID, нет и хранилища, и наоборот.Так как же соотносится идентификатор и имя
Идентификатор процесса Process ID (PID)
Идентификатор процесса Process ID (PID) Каждый процесс имеет уникальный идентификатор PID, позволяющий ядру системы различать процессы. Когда создается новый процесс, ядро присваивает ему следующий свободный (т. е. не ассоциированный ни с каким процессом) идентификатор.
Идентификатор родительского процесса Parent Process ID (PPID)
Идентификатор родительского процесса Parent Process ID (PPID) Идентификатор процесса, породившего данный
4.4 ПРЕВРАЩЕНИЕ СОСТАВНОГО ИМЕНИ ФАЙЛА (ПУТИ ПОИСКА) В ИДЕНТИФИКАТОР ИНДЕКСА
4.4 ПРЕВРАЩЕНИЕ СОСТАВНОГО ИМЕНИ ФАЙЛА (ПУТИ ПОИСКА) В ИДЕНТИФИКАТОР ИНДЕКСА Начальное обращение к файлу производится по его составному имени (имени пути поиска), как в командах open, chdir (изменить каталог) или link. Поскольку внутри системы ядро работает с индексами, а не с
Что такое NAT
Что такое NAT Средства NAT позволяют изменять в процессе маршрутизации содержимое TCP- и IP-пакетов. В частности, при NAT-преобразовании изменяется IP-адрес источника и назначения в составе пакета. Ниже описаны ситуации, в которых оправданы подобные изменения
16.7 Временная метка и идентификатор сообщения
16.7 Временная метка и идентификатор сообщения При получении почты интересно узнать время ее отправления и получения. SMTP добавляет эту информацию к пересылаемому сообщению. Кроме того, этот протокол отслеживает все хосты, которые передавали почтовое сообщение, и время
4.1.1. Что такое X.Оrg
4.1.1. Что такое X.Оrg 4.1.1.1. Немного истории В первых версиях Linux не было графического интерфейса.В апреле 1992 года для Linux была создана система X Window - графическая подсистема Linux.X Window (полное название X Window System) - это не графический интерфейс пользователя, это система,
Идентификатор транзакций
Идентификатор транзакций Другая часть стратегии тайм-аутов и повторных передач заключается в использовании идентификаторов транзакций (transaction ID или XID) для распознавания запросов клиента и ответов сервера. Когда клиент вызывает функцию RPC, библиотека присваивает этому
11. Идентификатор. Ключевые слова
11. Идентификатор. Ключевые слова Идентификатором называется последовательность цифр, букв и специальных символов. При этом первой стоит буква или специальный символ. Для получения идентификаторов можно использовать строчные или прописные буквы латинского алфавита.
Идентификатор домена
Идентификатор домена При создании в базе данных домена вы должны задать идентификатор домена, который является глобально уникальным в базе данных. Разработчики часто используют префикс или суффикс в идентификаторах доменов для улучшения документирования. Например:CREATE
Идентификатор открытого файла
Идентификатор открытого файла В состав класса CFile входит элемент данных m_hFile типа UINT. В нем хранится идентификатор открытого файла. Если вы создали объект класса CFile, но еще не открыли никакого файла, то в m_hFile записана константа hFileNull.Обычно нет необходимости
19.1. Что такое ICQ
19.1. Что такое ICQ ICQ — один из самых популярных сервисов мгновенного обмена сообщениями. Это своего рода Интернет-пейджер. Аббревиатура ICQ означает «I seek you» («Я ищу тебя»), в России эту программу принято называть «аськой».В общих чертах общение в ICQ выглядит так. Вы
1. Что это такое?
1. Что это такое? Точки восстановления системы — это «моментальные снимки» (snapshots) текущего состояния Windows, позволяющие вернуть систему к более раннему состоянию. Конечно, при таком откате будет потеряна часть настроек, включая список последних документов, списки истории,