Jump to content

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

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

Лексическая форма

[ редактировать ]

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

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

Семантика

[ редактировать ]

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

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

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

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

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

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

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

См. также

[ редактировать ]
  1. ^ Малик, Д. (2014). Программирование на C++: от анализа проблем к проектированию программ (7-е изд.). Cengage Обучение. п. 397. ИСБН  978-1-285-85274-4 .
  2. ^ «Спецификация языка программирования Go — Язык программирования Go» . Голанг.орг. 08.05.2013 . Проверено 5 июня 2013 г.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 312515d05b74e9cdb52228e0dea56302__1715617320
URL1:https://arc.ask3.ru/arc/aa/31/02/312515d05b74e9cdb52228e0dea56302.html
Заголовок, (Title) документа по адресу, URL1:
Identifier (computer languages) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)