Jump to content

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

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

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

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

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

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

[ редактировать ]

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

  • назначение
    • Фортран: variable = expression
    • Паскаль, Алгол 60, Ада: variable := expression;
    • C, C#, C++, PHP, Java: variable = expression;
  • вызов
    • Фортран: CALL subroutine name(parameters)
    • C, C++, Java, PHP, Паскаль, Ада: subroutine name(parameters);
  • утверждение
    • С, С++, PHP: assert(relational expression);
    • Ява: assert relational expression;
  • перейти к
    • Фортран: GOTO numbered-label
    • Алгол 60: goto label;
    • С, С++, PHP, Паскаль: goto label;
  • возвращаться
    • Фортран: RETURN value
    • C, C++, Java, PHP: return value;
  • стоп/остановка/выход
    • Фортран: STOP number
    • С, С++: exit(expression)
    • PHP: exit number;

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

[ редактировать ]

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

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

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

  • цикл, управляемый счетом :
    • Алгол 60: for index := 1 step 1 until limit do <statement> ;
    • Паскаль: for index := 1 to limit do <statement> ;
    • С, Ява: for ( index = 1; index <= limit; index += 1) <statement> ;
    • Есть: for index in 1..limit loop <sequence> end loop
    • Фортран 90:
      DO index = 1,limit
          <sequence>
      END DO
      
  • цикл с условием и проверкой в ​​начале цикла:
    • Алгол 60: for index := expression while test do <statement> ;
    • Паскаль: while test do <statement> ;
    • С, Ява: while (test) <statement> ;
    • Есть: while test loop <sequence> end loop
    • Фортран 90:
      DO WHILE (test)
          <sequence>
      END DO
      
  • цикл, управляемый по условию , с проверкой в ​​конце цикла:
    • Паскаль: repeat <sequence> until test; { note reversed test}
    • С, Ява: do { <sequence> } while (test) ;
    • Есть: loop <sequence> exit when test; end loop;
  • цикл, управляемый по условию, с проверкой в ​​середине цикла:
    • С: do { <sequence> if (test) break; <sequence> } while (true) ;
    • Есть: loop <sequence> exit when test; <sequence> end loop;
  • Простая ситуация с оператором if :
    • Алгол 60: if test then <unconditional statement> ;
    • Паскаль: if test then <statement> ;
    • С, Ява: if (test) <statement> ;
    • Есть: if test then <sequence> end if;
    • Фортран 77+:
      IF (test) THEN
          <sequence>
      END IF
      
  • оператора if двусторонний выбор :
    • Алгол 60: if test then <unconditional statement> else <statement> ;
    • Паскаль: if test then <statement> else <statement> ;
    • С, Ява: it (test) <statement> else <statement> ;
    • Есть: if test then <sequence> else <sequence> end if;
    • Фортран 77+:
      IF (test) THEN
          <sequence>
      ELSE
          <sequence>
      END IF
      
  • Оператор case/switch, многосторонний выбор:
    • Паскаль: case c of 'a': alert(); 'q': quit(); end;
    • Есть: case c is when 'a' => alert(); when 'q' => quit(); end case;
    • С, Ява: switch (c) { case 'a': alert(); break; case 'q': quit(); break; }
  • Обработка исключений :
    • Есть: begin protected code except when exception specification => exception handler
    • Ява: try { protected code } catch (exception specification) { exception handler } finally { cleanup }
    • Питон: try: protected code except exception specification: exception handler else: no exceptions finally: cleanup

Синтаксис

[ редактировать ]

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

  • В Алголе 60 использовалась форма Бэкуса-Наура (BNF), которая установила новый уровень спецификации грамматики языка. [3]
  • Вплоть до Фортрана 77 язык описывался английской прозой с примерами: [4] Начиная с Фортрана 90, язык описывался с использованием варианта BNF. [5]
  • Кобол использовал двумерный метаязык. [6]
  • Паскаль использовал как синтаксические диаграммы , так и эквивалентный BNF. [7]

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

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

[ редактировать ]

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

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

[ редактировать ]

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

  • в ПЛ/1:
    • IF IF = THEN THEN ... (второй IF и первый THEN являются переменными).
  • на Фортране:
    • IF (A) X = 10... условный оператор (с другими вариантами)
    • IF (A) = 2 присвоение индексной переменной с именем IF
Поскольку до Фортрана 95 пробелы были необязательными, опечатка могла полностью изменить смысл оператора:
  • DO 10 I = 1,5 начало цикла, где I работает от 1 до 5
  • DO 10 I = 1.5 присвоение значения 1,5 переменной DO10I

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

[ редактировать ]

В Алголе 60 и Алголе 68 специальные токены выделялись явно: для публикации жирным шрифтом, например begin; для программирования, с какой-то специальной маркировкой, например, флагом ( 'begin), кавычки ( 'begin') или подчеркнутый ( begin на Эллиотте 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. ^ Бэкус, Дж.В.; Бауэр, Флорида; Грин, Дж.; Кац, К.; Маккарти, Дж.; Наур, П.; Перлис, AJ; Рутисхаузер, Х.; Самуэльсон, К.; Вокуа, Б.; Вегштейн, Дж. Х.; ван Вейнгаарден, А.; Вуджер, М. Наур, Питер (ред.). «Пересмотренный отчет об алгоритмическом языке Алгол 60» . масса:верк . Раздел «4.1» . Проверено 23 января 2021 г.
  3. ^ Бэкус, Дж.В.; Бауэр, Флорида; Грин, Дж.; Кац, К.; Маккарти, Дж.; Наур, П.; Перлис, AJ; Рутисхаузер, Х.; Самуэльсон, К.; Вокуа, Б.; Вегштейн, Дж. Х.; ван Вейнгаарден, А.; Вуджер, М. Наур, Питер (ред.). «Пересмотренный отчет об алгоритмическом языке Алгол 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. ^ Кнут, Делавэр (июль 1967 г.). «Остающиеся проблемные места в Алголе 60» (PDF) . Семейство Алгол . Проверено 24 февраля 2021 г.
  9. ^ «ISO/IEC 9899:1999 (E)» (PDF) . ИСО/МЭК . Архивировано (PDF) из оригинала 7 февраля 2024 г.
  10. ^ «7. Простые высказывания» . Документация Python 3.10.8 .
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 7d5d868fa84ebab736f4e5022bb0290a__1715619600
URL1:https://arc.ask3.ru/arc/aa/7d/0a/7d5d868fa84ebab736f4e5022bb0290a.html
Заголовок, (Title) документа по адресу, URL1:
Statement (computer science) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)