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

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

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

Примеры:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ОценитеОценки посетителей
   ███████████████████ 4 (44.4%)
   ██████████████ 3 (33.3%)
   █████ 1 (11.1%)
   █████ 1 (11.1%)

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

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

Авторизация

Регистрация

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

Карта сайта


Содержание

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

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

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

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

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

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

●  Правила языка: скобки и их согласование

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

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

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

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

Компилятор

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

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

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

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




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

2024/11/21 11:02 ••• Автор сайта
Продолжение цикла и выход из него

2024/11/12 20:24 ••• Вежливый Лис
Правила языка: строки, комментарии

2024/11/12 13:10 ••• Вежливый Лис
Новости и прочее

2024/11/12 00:32 ••• Автор сайта
Оценка надёжности функции с несколькими реализациями

2024/11/06 02:50 ••• Иван
Энтузиасты-разработчики компиляторов и их проекты

2024/11/05 23:51 ••• Борис К.
Изменение приоритетов операций

2024/11/05 23:38 ••• Борис К.
Шестнадцатиричные и двоичные константы

2024/11/04 12:50 ••• Неслучайный читатель
Русский язык и программирование

2024/11/01 12:11 ••• ИванАс
Русской операционной системой должна стать ReactOS

2024/10/27 14:01 ••• Автор сайта
О русском ассемблере

2024/09/29 23:40 ••• Автор сайта
Десятка худших фич C#

2024/09/29 13:10 ••• Автор сайта
ЕС ЭВМ — это измена, трусость и обман?

2024/09/22 21:08 ••• Вежливый Лис
Бесплатный софт в мышеловке