Каким должен быть язык программирования? Анализ и критика Описание языка Компилятор
Отечественные разработки Cтатьи на компьютерные темы Компьютерный юмор Новости и прочее

Правила языка: идентификаторы

Идентификатор обязательно начинается либо буквой (язык чувствителен к регистру: заглавные и строчные буквы отличаются), либо символом нижнего подчёркивания, либо обратным апострофом. Со второго символа набор возможных символов идентификатора расширяется десятичными цифрами. Так же начиная со второго символа и далее может быть употреблён пустой оператор. Символы обратного апострофа обязаны быть парными. Между нечётным и чётным обратным апострофом могут находиться любые символы. Таким образом, если мы хотим включить в идентификатор произвольные символы, то для этого достаточно заключить их в обратные апострофы.

Примеры:

 XYZ			// идентификатор, состоящий только из букв, в нём одно слово

 a24			// второй и далее символы идентификатора могут быть цифрами

 _  3  _  7		// идентификатор начинается символом нижнего подчёркивания,
			// в нём в любом месте могут находиться пустые операторы

 нечто``		// идентификатор с двумя обратными апострофами

 любые `$*?:%` символы	// и такое может быть идентификатором, если «незаконные»
			// символы помещены внутрь обратных апострофов
 абв где ...
 (*комментарий*) ёж	// идентификатор на двух строках с комментарием внутри

 абв где ёж		// это одинаковые идентификаторы: что этот, что строкой выше

Идентификаторы перед помещением в таблицу идентификаторов компилятора проходят «нормализацию», которая состоит в том, что каждый пустой оператор, разделяющий слова идентификатора, заменяется на единственный пробел. Идентификаторы из примера выше будут иметь такой вид в таблице идентификаторов:

 XYZ
 a24
 _ 3 _ 7
 нечто``
 любые `$*?:%` символы
 абв где ёж		// идентификаторы в таблице не дублируются

Сочетание идентификаторов и ключевых слов

Если идентификатор состоит из нескольких слов, то это может создать неопределённость при принятии решения: чем является очередное встретившееся слово — частью многословного идентификатора или отдельным ключевым словом? Коллизия разрешается следующим способом.

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

Cлова в начале и в конце многословного идентификатора изымаются из его состава, если они являются ключевыми словами.

Например:
значение = (если условие выполнено то -1 иначе 0)

Этот пример показывает, что из последовательность слов «если условие выполнено то» изъяты ключевые слова «если» и «то» (на самом деле ключевого слова «то» в языке нет, оно в примере для наглядности) в начале последовательности и в конце. Поэтому идентификатор укорачивается до «условие выполнено». Ключевые слова, которые встретились в средине многословного идентификатора, опознаны не будут. По этой причине в языке отсутствуют ключевые слова «и», «или». Соответствующие им операции записываются специальными символами.

Формальное описание.

Первое слово идентификатора = 

  ( буква |  _  |  `  {  любые символы  }  `  )

  { буква |  _  |  `  {  любые символы  }  `  | цифра }
Следующее слово идентификатора = 

  { буква |  _  |  `  {  любые символы  }  `  | цифра }1
Идентификатор = 

  Контекстная зависимость от наличия ключевых слов 

  первое слово идентификатора

  [ Пустой оператор ]

  { следующее слово идентификатора }

  Контекстная зависимость от наличия ключевых слов 

Опубликовано: 2023.05.02, последняя правка: 2023.11.30    20:39

ОценитеОценки посетителей
   ██████████████████████████████████████████ 2 (100%)
   ▌ 0
   ▌ 0
   ▌ 0

Добавить свой отзыв

Написать автору можно на электронную почту
mail(аt)compiler.su

Авторизация

Регистрация

Выслать пароль

Карта сайта


Содержание

Каким должен быть язык программирования?

Анализ и критика

Описание языка

●  Философия языка

●  Правила языка: алфавит

●  Правила языка: строки, комментарии

●  Правила языка: идентификаторы

●●  Правила языка: встроенные типы

●  Правила языка: числовые типы и числовые константы

●  Правила языка: строковые литералы

●●  Правила языка: функции

Компилятор

Отечественные разработки

Cтатьи на компьютерные темы

Компьютерный юмор

Новости и прочее




Последние отзывы

2024/04/28 15:58 ••• Автор сайта
Обработка ошибок

2024/04/28 14:50 ••• Автор сайта
Энтузиасты-разработчики компиляторов и их проекты

2024/04/23 00:00 ••• alextretyak
Признаки устаревшего языка

2024/04/21 00:00 ••• alextretyak
Постфиксные инкремент и декремент

2024/04/20 21:28 ••• Бурановский дедушка
Русский язык и программирование

2024/04/07 15:33 ••• MihalNik
Все языки эквивалентны. Но некоторые из них эквивалентнее других

2024/04/01 23:39 ••• Бурановский дедушка
Новости и прочее

2024/04/01 23:32 ••• Бурановский дедушка
Русской операционной системой должна стать ReactOS

2024/03/22 20:41 ••• void
Раскрутка компилятора

2024/03/20 19:54 ••• kt
О многократном резервировании функций

2024/03/20 13:13 ••• Неслучайный читатель
Надёжные программы из ненадёжных компонентов

2024/03/07 14:16 ••• Неслучайный читатель
«Двухмерный» синтаксис Python

2024/03/03 16:49 ••• Автор сайта
О неправомерном доступе к памяти через указатели