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

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

Строки и операторы

Символ перевода строки 

	=  ��  (шестнадцатиричное 0D0A)
	|  (шестнадцатиричное 0A)
	|  (шестнадцатиричное 0D)
Исторически сложилось так, что перевод строки на разных платформах реализован по-разному. Это правило учитывает все варианты.

Символы перевода строки (шестнадцатиричное 0D, 0A) «поглощаются» внутри лексем продолжение строки, длинный комментарий и документирующий комментарий. Эти символы, конечно, остаются, но в составе этих лексем. В этом случае влияют только на номер строки в тексте программы (для отображения в тектовом редакторе или в сообщениях об ошибке), но не являются концом оператора.

Эти символы не являются концом оператора, если в этом месте оператор не заканчивается, предполагается его продолжение на следующей строке. Такому переводу строки предшествуют спецсимволы: запятые, точки, двоеточия, символы операций и т. п.

Символы перевода строки (шестнадцатиричное 0D, 0A) «поглощаются» внутри лексем продолжение строки, длинный комментарий и документирующий комментарий. Эти символы, конечно, остаются, но в составе этих лексем. В этом случае влияют только на номер строки в тексте программы, но не являются концом оператора.

Перевод строки = 

	{ Символ перевода строки }1

Если перевод строки встречаются несколько подряд, то не играет роли, сколько раз он встретился.

Последовательность пустых символов = 

	{ Пустой символ }1
Продолжение строки = 

    =  ...  [ Последовательность пустых символов ] Перевод строки

    | Контекстная зависимость 

    [Последовательность пустых символов] Перевод строки

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

 z = f (x,
        y)
 A = B +
     C
 Структура .
   член структуры =
      нечто
Длинный комментарий = 

  (*  {  *  } {  любые символы  }
	{ Контекстная зависимость  *  }  *) 
 Количество звёздочек в конце комментария 
 должно быть не меньше, чем в начале

Этот вид комментария аналогичен комментарию вида /* { любые символы } */, знакомому по другим языкам программирования. Отличается в лучшую сторону тем, что решает проблему вложенности комментариев. Комментарии вида (* ... *) всегда можно вложить внутрь других, увеличив количество звёздочек:

    (*** Комментарии с тремя звёздочками могут включать в себя
	комментарии с двумя звёздочками и одной
	(** Комментарии с двумя звёздочками могут включать в себя 
	       комментарии с одной звёздочкой
	    (* Комментарий с одной звёздочкой
	    *)
	**)
    ***)

А вот обратное неверно: комментарий с меньшим числом звёздочек не может включать в себя комментарий с большим количеством звёздочек. Так же следует учитывать, что комментарии

    (* ... ****)
не нарушают правило, описывающее длинный комментарий. Но во избежание путаницы лучше употреблять равное количество звёздочек в начале и конце.

Выгода замены /* ... */ на (* ... *) в том, что последний вариант «отключает» при надобности блоки внутри скобок, просто добавив звёздочки:

    // было:
	( некий блок )
    // теперь отключаем:
	(* некий блок *)
Документирующий комментарий

    =  <html>  {любые символы}  </html> 

    |  <ягтр>  {любые символы}  </ягтр> 

    |  [wiki]  {любые символы}  [/wiki] 

    |  [вики]  {любые символы}  [/вики] 

С назначением этого этого вида комментария можно познакомиться в статье Комментарии автоматической генерации документации.

P.S. Этот вариант синтаксиса пока что является черновым.

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

    = Последовательность пустых символов

    | Продолжение строки

    | Длинный комментарий

    | Документирующий комментарий }

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

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

Примеры:

  Идентификатор состоящий из нескольких ...
  слов			// Это всё идентификатор
  Это тоже (* комментарий внутри *) идентификатор
  123 (* миллиона *) 456 (* тысяч *) 7 8 9
  1 6: FE DC BA 98

Приведённое выше на Си записали бы так:

  ИдентификаторСостоящийИзНесколькихСлов
  ЭтоТожеИдентификатор
  123456789
  0xFEDCBA98
Точка с запятой

    =  ; 
Короткий комментарий

    =  //  {  любые символы  } Перевод строки

Это традиционный для Си-подобных языков комментарий. Правда, из-за того, что в последней строке файла нет символов перевода строки, некоторые компиляторы воспринимают короткий комментарий в последний строке как ошибку: ведь он не заканчивается переводом строки. Самый простой способ решать проблему — добавить к концу считываемого файла символы перевода строки.

Конец оператора

    = { Перевод строки

    | Точка с запятой

    | Короткий комментарий }1

Если конец оператора встречается несколько раз подряд, то второе и далее его повторение становится пустым оператором. Операторы в программе заканчиваются, как правило, переводом строки. На одной строке можно разметить несколько операторов, разделив их точкой с запятой.

Перевод строки и точка с запятой, как правило, взаимозаменяемы и равнозначны в синтаксисе и семантике. Исключением является продолжение строки и короткий комментарий, которые обязательно заканчиваются переводом строки, но никак не точкой с запятой.

 // Можно так
 z = f (x, y)
 A = B + C
 // а можно эдак
 z = f (x, y); A = B + C

Опубликовано: 2023.05.02, последняя правка: 2023.05.02    23:40

ОценитеОценки посетителей
   ██████████████████████████████████████████ 1 (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 ••• Автор сайта
О неправомерном доступе к памяти через указатели