stringtranslate.com

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

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

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

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

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

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

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

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

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

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

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

Синтаксис

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

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

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

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

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

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

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

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

В Алголе 60 и Алголе 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. ^ «Заявление». вебопедия. Сентябрь 1996 года . Проверено 3 марта 2015 г.
  2. ^ Бэкус, JW; Бауэр, Флорида; Грин, Дж.; Кац, К.; Маккарти, Дж.; Наур, П.; Перлис, Эй Джей; Рутисхаузер, Х.; Самуэльсон, К.; Вокуа, Б.; Вегштейн, Дж. Х.; ван Вейнгаарден, А.; Вуджер, М. Наур, Питер (ред.). «Пересмотренный отчет об алгоритмическом языке Алгол 60». масса:верк . Раздел «4.1» . Проверено 23 января 2021 г.
  3. ^ Бэкус, JW; Бауэр, Флорида; Грин, Дж.; Кац, К.; Маккарти, Дж.; Наур, П.; Перлис, Эй Джей; Рутисхаузер, Х.; Самуэльсон, К.; Вокуа, Б.; Вегштейн, Дж. Х.; ван Вейнгаарден, А.; Вуджер, М. Наур, Питер (ред.). «Пересмотренный отчет об алгоритмическом языке Алгол 60». масса: верк . Раздел «1.1» . Проверено 23 января 2021 г.
  4. ^ «ФОРТРАН» (PDF) . Институт стандартов США. 1966 год . Получено 19 февраля 2021 г. - через WG5 Fortran Standards.
  5. ^ «Рабочий проект J3/04-007» (PDF) . J3 Фортран. 10 мая 2004 года . Проверено 19 февраля 2021 г.
  6. ^ «Справочное руководство по программированию на ASCII COBOL» (PDF) . унисис. Июнь 2010 года . Проверено 23 января 2021 г.
  7. ^ Дженсен, Кэтлин; Вирт, Никлаус (1974). Гус, Г.; Хартманис, Дж. (ред.). «Руководство пользователя и отчет PASCAL» (PDF) . Конспекты лекций по информатике . Приложение Д. Проверено 19 февраля 2021 г.
  8. ^ Кнут, DE (июль 1967 г.). «Остающиеся проблемные места в Алголе 60» (PDF) . Семейство Алгол . Проверено 24 февраля 2021 г.
  9. ^ «ISO/IEC 9899:1999 (E)» (PDF) . ИСО/МЭК . Архивировано (PDF) из оригинала 7 февраля 2024 г.
  10. ^ «7. Простые утверждения». Документация Python 3.10.8 .

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