Идентификатор (компьютерные языки) - Identifier (computer languages)

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

Какие последовательности символов составляют идентификаторы, зависит от лексическая грамматика языка. Общее правило буквенно-цифровой последовательности, с подчеркиванием также разрешено (в некоторых языках _ не допускается), и с условием, что он не начинается с числовой цифры (для упрощения лексика избегая путаницы с целочисленные литералы ) - так foo, foo1, foo_bar, _foo разрешены, но 1foo нет - это определение использовалось в более ранних версиях C и C ++, Python, и многие другие языки. Более поздние версии этих языков, наряду со многими другими современными языками, поддерживают многие другие Unicode символы в идентификаторе. Однако обычным ограничением является запрет на использование символов пробела и языковых операторов; это упрощает токенизацию, делая ее свободная форма и контекстно-свободный. Например, запрещая + в идентификаторах из-за его использования в качестве двоичной операции означает, что а + б и а + б могут быть токенизированы одинаково, а если бы это было разрешено, а + б будет идентификатором, а не дополнением. Пробелы в идентификаторе особенно проблематичны, поскольку если в идентификаторах разрешены пробелы, тогда предложение, такое как если дождливый день то 1 законно, с дождливый день в качестве идентификатора, но для его токенизации требуется, чтобы фразовый контекст находился в условии условия if. Однако некоторые языки допускают использование пробелов в идентификаторах, например АЛГОЛ 68 и некоторые варианты АЛГОЛА - например, следующий действительный оператор: настоящий половина пи; который можно ввести как .настоящий. половина пи; (ключевые слова выделены жирным шрифтом, конкретно через строппинг ). В ALGOL это стало возможным, потому что ключевые слова синтаксически различаются, поэтому нет риска столкновения или двусмысленности, пробелы удаляются во время реконструкция линии фаза, а источник обрабатывался через разбор без сканирования, поэтому лексирование может быть контекстно-зависимым.

В большинстве языков некоторые последовательности символов имеют лексическую форму идентификатора, но известны как ключевые слова - Например, если часто является ключевым словом для предложения if, но лексически имеет ту же форму, что и ig или фу а именно последовательность букв. Это перекрытие можно обрабатывать по-разному: им можно запретить быть идентификаторами - что упрощает токенизацию и синтаксический анализ - и в этом случае они зарезервированные слова; они оба могут быть разрешены, но различаться другими способами, например, с помощью штриховки; или последовательности ключевых слов могут быть разрешены в качестве идентификаторов, и смысл которых определяется из контекста, что требует контекстно-зависимого лексера. Не ключевые слова также могут быть зарезервированными словами (запрещенными в качестве идентификаторов), особенно для прямая совместимость, на случай, если в будущем слово может стать ключевым словом. На нескольких языках, например, PL / 1, различие неясно.

Область действия или доступность идентификатора в программе может быть локальной или глобальной. Глобальный идентификатор объявляется вне функций и доступен во всей программе. Локальный идентификатор объявляется внутри конкретной функции и доступен только внутри этой функции.[1]

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

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

Компиляторы и интерпретаторы обычно не придают никакого семантического значения идентификатору на основе фактически используемой последовательности символов. Однако бывают исключения.

Например:

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

В некоторых языках, таких как Go, уникальность идентификаторов основана на их написании и видимости.[2]

В HTML идентификатор - один из возможных атрибуты из HTML элемент. Он уникален в рамках документа.

Рекомендации

  1. ^ Малик, Д. (2014). Программирование на C ++: от анализа проблем до разработки программ (7-е изд.). Cenage Learning. п. 397. ISBN  978-1-285-85274-4.
  2. ^ "Спецификация языка программирования Go - язык программирования Go". Golang.org. 2013-05-08. Получено 2013-06-05.