Loading AI tools
З Вікіпедії, вільної енциклопедії
У комп'ютерному програмуванні інструкція (вказівка, англ. statement) — синтаксична одиниця імперативної мови програмування, яка вказує на певну дію, яку потрібно виконати[1][2]. Програма, написана такою мовою, є послідовністю інструкцій. Інструкція може мати внутрішні компоненти (наприклад, вирази).
Багато мов програмування (наприклад, Ada, Algol 60, C, Java, Pascal ) роблять різницю між інструкціями та визначеннями/деклараціями. Визначення або оголошення визначає дані, з якими має працювати програма, тоді як інструкція визначає дії, які мають бути виконані з цими даними.
Інструкції, які не можуть містити інших тверджень, є простими; ті, які можуть містити інші інструкції, є складеними[2].
Зовнішній вигляд інструкції (і, власне, програми) визначається її синтаксисом або граматикою мови програмування. Значення інструкції визначається її семантикою .
Прості інструкції повні самі по собі; вони включають присвоювання значень, виклики підпрограм та вказівки, які можуть суттєво впливати на процес виконання програми (наприклад, goto, return, stop/halt). У деяких мовах процеси введення та виведення даних, інструкції та виходи обробляються спеціальними інструкціями, тоді як інші мови використовують виклики попередньо визначених підпрограм.
GOTO numbered-label
Складені інструкції можуть містити послідовності інструкцій, вкладених на будь-яку достатньо розумну глибину, і, як правило, передбачають перевірки, щоб вирішити, чи слід виконувати чи повторювати вказівки, що містяться в них.
Позначення:
Деякі мови програмування забезпечують загальний спосіб групування інструкцій разом, так що будь-яку окрему <інструкцію> можна замінити групою:
begin
<послідовність інструкцій> end
begin <послідовність інструкцій> end
{ <послідовність інструкцій> }
Інші мови програмування мають різні спеціальні термінатори для кожного типу складених інструкцій, тому одна або кілька інструкцій автоматично розглядаються як група:
if <умова> then <послідовність інструкцій> end if;
Багато складених інструкцій є вказівками циклу або вказівками вибору. Теоретично потрібна лише одна з цих типів вказівок, але на практиці існують різні особливі випадки, в яких використання подібних може зробити програму легшою для розуміння, вони можуть полегшити програмування та часто можуть бути реалізовані набагато ефективніше:
for
index := 1 step 1 until limit do <інструкція>;
for index := 1 to limit do <інструкція>;
for ( index = 1; index <= limit; index += 1) <інструкція>;
for index in 1..limit loop <послідовність інструкцій> end loop
DO index = 1,limit
<послідовність інструкцій>
END DO
for index := expression while умова do <інструкція>;
while умова do <інструкція>;
while (умова) <інструкція>;
while умова loop <послідовність інструкцій> end loop
DO WHILE (умова)
<послідовність інструкцій>
END DO
repeat <послідовність інструкцій> until умова; { note reversed test}
do { <послідовність інструкцій> } while (умова);
loop <послідовність інструкцій> exit when умова; end loop;
do { <послідовність інструкцій> if (умова) break; <послідовність інструкцій> } while (true);
loop <послідовність інструкцій> exit when умова; <послідовність інструкцій> end loop;
if
умова then <unconditional інструкція>;
if умова then <інструкція>;
if (умова) <інструкція>;
if умова then <послідовність інструкцій> end if;
IF (умова) THEN
<послідовність інструкцій>
END IF
if умова then <unconditional інструкція> else <інструкція>;
if умова then <інструкція> else <інструкція>;
if (умова) <інструкція> else <інструкція>;
if умова then <послідовність інструкцій> else <послідовність інструкцій> end if;
IF (умова) THEN
<послідовність інструкцій>
ELSE
<послідовність інструкцій>
END IF
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 тощо), як показано у наведених вище прикладах. Для опису форми тверджень різними мовами використовувалися різні методи; більш формальні методи, як правило, більш точні:
BNF використовує рекурсію для вираження повторення, тому були запропоновані різні розширення, щоб дозволити пряму індикацію циклів.
Деякі граматики мов програмування резервують службові слова або спеціально позначають їх і не дозволяють використовувати їх як ідентифікатори. Це надає можливість створювати граматики мов програмування, які легше аналізувати, вимагаючи менше перегляду вперед .
Fortran і PL/1 не мають зарезервованих службових слів, що дозволяє такі інструкціями, як:
PL/1:
IF IF = THEN THEN ...
(другий IF і перший THEN– змінні).Fortran:
IF (A) X = 10...
умовна вказівка (з іншими варіантами)IF (A) = 2
- присвоєння змінній з іменем IFОскільки пропуски були необов’язковими до Fortran 95, друкарська помилка могла повністю змінити значення інструкції:
DO 10 I = 1,5
початок циклу з I, що працює від 1 до 5DO 10 I = 1.5
присвоєння змінній DO10I
значення 1,5Основна стаття: Стропінг (синтаксис)
В Algol 60 і Algol 68 чітко виділялися спеціальні лексеми:
Це називається «стропінг», токени, які є частиною синтаксису мови, таким чином, не конфліктують із назвами, визначеними програмістом.
Певні імена зарезервовано як частину мови програмування, і їх не можна використовувати як ідентифікатори, визначені програмістом. Більшість популярних мов програмування використовують зарезервовані службові слова. Першими такими мовами програмування були FLOW-MATIC (1953) і COBOL (1959). З 1970 року зарезервовані службові слова використовують Ada, C, C++, Java і Pascal. Кількість зарезервованих слів залежить від мови: C має близько 30, тоді як COBOL має близько 400 таких слів.
Більшість мов мають фіксований набір інструкцій, визначених мовою, але були експерименти з розширюваними мовами, які дозволяють програмісту визначати нові інструкції.
Основна стаття: Семантика мов програмування
Семантика стосується значення інструкцій, які використовуються у програмах. У багатьох мовах програмування використовується BNF або подібний еквівалент для вираження синтаксису/граматики досить формальним і точним способом, але семантика/значення інструкцій зазвичай описується з використанням прикладів і правил англійської мови, що може призвести до неоднозначності..
У мовах програмування розрізняють інструкції, які виконуються, та вирази, які обчислюються. Вирази завжди мають значення, а інструкції – ні. Однак вирази часто використовуються як частина складеної інструкції.
У більшості мов програмування інструкція може складатися лише з виразу, зазвичай після виразу ставиться термінатор (крапка з комою).
Вирази також можуть міститися в інших виразах. Наприклад, вираз x = y + 1 містить вираз y + 1, який, у свою чергу, містить значення y та 1, які також технічно теж є технічними виразами.
Хоча попередні приклади показують вирази присвоєння, деякі мови реалізують присвоєння не як вираз, а як інструкцію. Яскравим прикладом цього є Python , де = не є інструкцією, а просто роздільником у вказівці присвоєння. Хоча Python допускає кілька присвоювань, оскільки кожне присвоювання є виразом, це просто окремий випадок інструкції присвоєння, вбудованої в граматику мови, а не справжній вираз.
На теренах колишнього СРСР є певна плутанина щодо перекладу англійського "statement" - досить часто зустрічається термін "оператор", який з'явився у 1965 році, під час перекладу перекладаючи "Revised Report on the Algorithmic Language Algol 60". А.П.Єршов та М.Р.Шура-Бура переклали англійське "operator" як "знак операції", а "statement" - як "оператор", хоча в англійській термінології operator (+, -, % тощо) слугує для позначення операцій над операндами (див. детальніше: Оператор (програмування)), що породило чимало неузгодженостей у вітчизняній інформатиці. Так в українських та російських джерелах можна зустріти, наприклад, переклад if-statement як інструкція if[7] і як оператор if[8]. У ряді перекладів книг де англ. statement перекладають як оператор, замість англ. operator вживають термін операція. Також для позначення решти інструкцій (присвоєння, виклик тощо), що також позначається як англ. statement у вітчизняній літературі ряд перекладачів вживають інколи оператор, інколи вираз, інколи команда. Для позначення складених інструкцій (if, if-else, while та ін.) у вітчизняних джерелах зустрічається термін конструкція (наприклад, "конструкція while")[9].
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.