stringtranslate.com

Заявление (информатика)

В компьютерном программировании оператор это синтаксическая единица императивного языка программирования , которая выражает некоторое действие, которое должно быть выполнено. [1] Программа , написанная на таком языке, формируется последовательностью одного или нескольких операторов. Оператор может иметь внутренние компоненты (например, выражения ).

Многие языки программирования (например, Ada , Algol 60 , C , Java , Pascal ) различают операторы и определения/декларации . Определение или декларация определяют данные, с которыми должна работать программа, в то время как оператор определяет действия, которые следует выполнить с этими данными.

Высказывания, которые не могут содержать другие высказывания, являются простыми ; те, которые могут содержать другие высказывания, являются сложными . [2]

Внешний вид оператора (и, конечно, программы) определяется его синтаксисом или грамматикой. Значение оператора определяется его семантикой .

Простые утверждения

Простые операторы являются полными сами по себе; они включают назначения, вызовы подпрограмм и несколько операторов, которые могут существенно повлиять на поток управления программой (например, goto , return , stop/halt ). В некоторых языках ввод и вывод, утверждения и выходы обрабатываются специальными операторами, в то время как другие языки используют вызовы предопределенных подпрограмм.

Составные утверждения

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

Обозначения для следующих примеров:
  • <statement> — это любое отдельное утверждение (может быть простым или составным).
  • <последовательность> — это любая последовательность из нуля или более <выражений>
Некоторые языки программирования предоставляют общий способ группировки операторов, так что любой отдельный <оператор> можно заменить группой:
  • Алгол 60:begin <sequence> end
  • Паскаль:begin <sequence> end
  • С, PHP, Java:{ <sequence> }
В других языках программирования для каждого вида составного оператора используется свой специальный терминатор, так что один или несколько операторов автоматически рассматриваются как группа:
  • Ада:if test then <sequence> end if;

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

Синтаксис

Помимо назначений и вызовов подпрограмм, большинство языков начинают каждое выражение со специального слова (например, goto, if, while и т. д.), как показано в приведенных выше примерах. Для описания формы выражений в разных языках использовались различные методы; более формальные методы, как правило, более точны:

BNF использует рекурсию для выражения повторения, поэтому были предложены различные расширения, позволяющие напрямую указывать на повторение.

Заявления и ключевые слова

Некоторые грамматики языков программирования резервируют ключевые слова или помечают их особым образом и не позволяют использовать их в качестве идентификаторов . Это часто приводит к грамматикам, которые легче анализировать , требуя меньшего количества предварительных просмотров .

Нет выделенных ключевых слов

В Fortran и PL/1 нет зарезервированных ключевых слов, что позволяет использовать такие операторы:

Поскольку вплоть до версии Fortran 95 пробелы были необязательными, опечатка могла полностью изменить смысл выражения:
  • DO 10 I = 1,5 начало цикла с I, бегущим от 1 до 5
  • DO 10 I = 1.5 присвоение переменной значения 1,5DO10I

Помеченные слова

В Algol 60 и Algol 68 специальные токены были выделены явно: для публикации — жирным шрифтом, например begin; для программирования — специальной маркировкой, например, флагом ( 'begin), кавычками ( 'begin') или подчеркиванием ( beginна Elliott 503 ). Это называется «правкой».

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

Зарезервированные ключевые слова

Некоторые имена зарезервированы как часть языка программирования и не могут использоваться как имена, определяемые программистом. Большинство самых популярных языков программирования используют зарезервированные ключевые слова. Ранние примеры включают FLOW-MATIC (1953) и COBOL (1959). С 1970 года другие примеры включают Ada, C, C++, Java и Pascal. Количество зарезервированных слов зависит от языка: в C их около 30, а в COBOL — около 400.

Семантика

Семантика касается смысла программы. Стандартные документы для многих языков программирования используют BNF или какой-либо эквивалент для выражения синтаксиса/грамматики довольно формальным и точным способом, но семантика/смысл программы обычно описывается с помощью примеров и английской прозы. Это может привести к двусмысленности. [8] В некоторых описаниях языков смысл составных операторов определяется использованием «более простых» конструкций, например, цикл while может быть определен комбинацией тестов, переходов и меток , используя ifи goto.

Статья о семантике описывает несколько математических/логических формализмов, которые использовались для точного определения семантики; они, как правило, сложнее, чем BNF, и ни один подход не является общепринятым в качестве единственного. Некоторые подходы эффективно определяют интерпретатор для языка, некоторые используют формальную логику для рассуждения о программе, некоторые присоединяют аффиксы к синтаксическим сущностям для обеспечения согласованности и т. д.

Выражения

Часто проводится различие между операторами, которые выполняются, и выражениями , которые оцениваются. Выражения всегда оцениваются в значение, которое операторы не оценивают. Однако выражения часто используются как часть более крупного оператора.

В большинстве языков программирования оператор может состоять из немного большего, чем выражение, обычно с последующим выражением с терминатором оператора (точкой с запятой). В таком случае, хотя выражение вычисляется в значение, полный оператор не вычисляется (значение выражения отбрасывается). Например, в C, C++, C# и многих подобных языках, x = y + 1есть выражение, которое установит x в значение y плюс один, и все выражение само по себе будет вычисляться в то же значение, что и x. Однако x = y + 1;(обратите внимание на точку с запятой в конце) есть оператор, который все равно установит x в значение y плюс один, потому что выражение внутри оператора все еще вычисляется, но результат выражения отбрасывается, и сам оператор не вычисляется в какое-либо значение. [9]

Выражения также могут содержаться внутри других выражений. Например, выражение x = y + 1содержит выражение y + 1, которое в свою очередь содержит значения yи 1, которые также технически являются выражениями.

Хотя предыдущие примеры показывают выражения присваивания, некоторые языки не реализуют присваивание как выражение, а скорее как оператор. Ярким примером этого является Python , где = не является оператором, а скорее просто разделителем в операторе присваивания. Хотя Python допускает множественные присваивания, поскольку каждое присваивание является выражением, это просто частный случай оператора присваивания, встроенного в грамматику языка, а не истинное выражение. [10]

Расширяемость

Большинство языков имеют фиксированный набор операторов, определяемых языком, но проводились эксперименты с расширяемыми языками , которые позволяют программисту определять новые операторы.

Смотрите также

Ссылки

  1. ^ "заявление". webopedia. Сентябрь 1996 г. Получено 2015-03-03 .
  2. ^ Бэкус, JW; Бауэр, Флорида; Грин, Дж.; Кац, К.; Маккарти, Дж.; Наур, П.; Перлис, Эй Джей; Рутисхаузер, Х.; Самуэльсон, К.; Вокуа, Б.; Вегштейн, Дж. Х.; ван Вейнгаарден, А.; Вуджер, М. Наур, Питер (ред.). «Пересмотренный отчет об алгоритмическом языке Алгол 60». масса:верк . Раздел «4.1» . Проверено 23 января 2021 г.
  3. ^ Бэкус, JW; Бауэр, Флорида; Грин, Дж.; Кац, К.; Маккарти, Дж.; Наур, П.; Перлис, Эй Джей; Рутисхаузер, Х.; Самуэльсон, К.; Вокуа, Б.; Вегштейн, Дж. Х.; ван Вейнгаарден, А.; Вуджер, М. Наур, Питер (ред.). «Пересмотренный отчет об алгоритмическом языке Алгол 60». масса:верк . Раздел «1.1» . Проверено 23 января 2021 г.
  4. ^ "FORTRAN" (PDF) . Институт стандартов Соединенных Штатов Америки. 1966. Получено 19 февраля 2021 г. – через WG5 Fortran Standards.
  5. ^ "Рабочий проект J3/04-007" (PDF) . J3 Fortran. 10 мая 2004 г. . Получено 19 февраля 2021 г. .
  6. ^ "ASCII COBOL Programming Reference Manual" (PDF) . unisys. Июнь 2010 . Получено 23 января 2021 .
  7. ^ Jensen, Kathleen; Wirth, Niklaus (1974). Goos, G.; Hartmanis, J. (ред.). "PASCAL User Manual and Report" (PDF) . Lecture Notes in Computer Science . Приложение D . Получено 19 февраля 2021 г. .
  8. ^ Knuth, DE (июль 1967). "Оставшиеся проблемные места в Algol 60" (PDF) . Семейство ALGOL . Получено 24 февраля 2021 г. .
  9. ^ "ISO/IEC 9899:1999 (E)" (PDF) . ISO/IEC . Архивировано (PDF) из оригинала 7 февраля 2024 г.
  10. ^ "7. Простые операторы". Документация Python 3.10.8 .

Внешние ссылки