Інструкція (програмування)У комп'ютерному програмуванні інструкція (вказівка, англ. statement) — синтаксична одиниця імперативної мови програмування, яка вказує на певну дію, яку потрібно виконати[1][2]. Програма, написана такою мовою, є послідовністю інструкцій. Інструкція може мати внутрішні компоненти (наприклад, вирази). Багато мов програмування (наприклад, Ada, Algol 60, C, Java, Pascal ) роблять різницю між інструкціями та визначеннями/деклараціями. Визначення або оголошення визначає дані, з якими має працювати програма, тоді як інструкція визначає дії, які мають бути виконані з цими даними. Інструкції, які не можуть містити інших тверджень, є простими; ті, які можуть містити інші інструкції, є складеними[2]. Зовнішній вигляд інструкції (і, власне, програми) визначається її синтаксисом або граматикою мови програмування. Значення інструкції визначається її семантикою . Прості інструкціїПрості інструкції повні самі по собі; вони включають присвоювання значень, виклики підпрограм та вказівки, які можуть суттєво впливати на процес виконання програми (наприклад, goto, return, stop/halt). У деяких мовах процеси введення та виведення даних, інструкції та виходи обробляються спеціальними інструкціями, тоді як інші мови використовують виклики попередньо визначених підпрограм.
Зупинка/вихідСкладені інструкціїСкладені інструкції можуть містити послідовності інструкцій, вкладених на будь-яку достатньо розумну глибину, і, як правило, передбачають перевірки, щоб вирішити, чи слід виконувати чи повторювати вказівки, що містяться в них. Позначення:
Деякі мови програмування забезпечують загальний спосіб групування інструкцій разом, так що будь-яку окрему <інструкцію> можна замінити групою:
Інші мови програмування мають різні спеціальні термінатори для кожного типу складених інструкцій, тому одна або кілька інструкцій автоматично розглядаються як група:
Багато складених інструкцій є вказівками циклу або вказівками вибору. Теоретично потрібна лише одна з цих типів вказівок, але на практиці існують різні особливі випадки, в яких використання подібних може зробити програму легшою для розуміння, вони можуть полегшити програмування та часто можуть бути реалізовані набагато ефективніше:
Цикл з контролем за умовами в середині циклу
Опрацьовування винятків
СинтаксисОсновна стаття: Синтаксис мови програмування Окрім присвоювань і викликів підпрограм, більшість мов починають кожну інструкція зі спеціального слова (наприклад, goto, if, while тощо), як показано у наведених вище прикладах. Для опису форми тверджень різними мовами використовувалися різні методи; більш формальні методи, як правило, більш точні:
BNF використовує рекурсію для вираження повторення, тому були запропоновані різні розширення, щоб дозволити пряму індикацію циклів. Інструкції та службові словаДеякі граматики мов програмування резервують службові слова або спеціально позначають їх і не дозволяють використовувати їх як ідентифікатори. Це надає можливість створювати граматики мов програмування, які легше аналізувати, вимагаючи менше перегляду вперед . Мови без зарезервованих службових слівFortran і PL/1 не мають зарезервованих службових слів, що дозволяє такі інструкціями, як: PL/1:
Fortran:
Оскільки пропуски були необов’язковими до Fortran 95, друкарська помилка могла повністю змінити значення інструкції:
Виділені словаОсновна стаття: Стропінг (синтаксис) В 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]. Примітки
|