На комп'ютерній мові зарезервоване слово (також відоме як зарезервований ідентифікатор) — це слово, яке не може використовуватися як ідентифікатор, наприклад, назва змінної, функції або мітки — воно «зарезервоване від використання». Це визначене синтаксисом слово і воно може зовсім не мати значення.
Доволі близькими є поняття «зарезервоване слово» та «ключове слово». Ці слова мають спеціальне значення в окремих випадках. Це визначено семантикою. Але імена в стандартній бібліотеці, які не є вбудованими в мову не вважаються зарезервованими чи ключовими словами. Терміни «зарезервоване слово» та «ключове слово» часто використовують як взаємнозамінні. Про зарезервовані слова можна сказати, що вони «зарезервовані для використання як ключові слова», а формальне використання змінюється залежно від мови.
В основному зарезервовані та ключові слова не повинні збігатися, але в найновіших мовах ключові слова є підмножиною зарезервованих, це робить парсинг простішим так як не можливо сплутати ключові слова з ідентифікаторами. В деяких мовах, таких як, С чи Python, зарезервовані та ключові слова збігаються, коли в інших мовах, як Java, всі ключові слова є зарезервованими, але деякі зарезервовані слова не є ключовими, вони є «зарезервованими для майбутнього використання». В старіших мовах, ALGOL, FORTRAN, і (PL/I), є ключові слова, але немає зарезервованих, ключові слова відрізнялися від ідентифікаторів в інший спосіб. Це робить парсинг більш складним.
Відмінність
Набори зарезервованих та ключових слів в мові часто збігаються або є майже однаковими, і різниця між ними інколи є не відчутною, а ці терміни часто є взаємозамінними. Однак при уважному використанні ці терміни відрізняються.
Якщо зробити ключові слова зарезервованими, то це полегшує лексичний аналіз. Тому що можна однозначно визначити чим є рядок символів, ключовим словом чи ідентифікатором. Саме тому ключові слова зазвичай є зарезервованими. Однак зарезервовані слова не повинні бути ключовими. Як приклад в мові Java є зарезервоване слово goto
, але воно не має ніякого значення і воно не зустрічається в жодних правилах створення граматик. Це зроблено для [en]: у майбутніх версіях зарезервовані слова можуть стати ключовими, і це не вимагатиме змін у вже наявних програмах.
З іншого боку ключові слова не повинні бути зарезервованими, їх роль зрозуміла з контексту, або вони мають розрізнятись у інший спосіб, такий, як [en]. Наприклад вираз if = 1
є однозначним у більшості граматик, оскільки умова в операторі if
не може починатися зі знака =
, тому такі вирази дозволені у деяких мовах, зокрема у FORTRAN. В ALGOL 68 ключові слова мають бути певним чином позначені — в суворій мові вони позначаються жирним шрифтом, і таким чином вони не є зарезервованими. Отже, наступний вираз є правильним, ключове слово if яке виділене жирним шрифтом не буде конфліктувати зі звичайним ідентифікатором if
- if if eq 0 then 1 fi
Проте в [en] існує також режим stropping, в якому ключові слова є зарезервованими словами, що є прикладом того, як ці різні поняття часто збігаються; багато сучасних мов також слідують цьому правилу.
Синтаксис
Зарезервоване слово — це слово, яке «виглядає як» звичайне слово, але не може використовуватися як звичайне слово. Формально це означає, що воно задовольняє звичайний синтаксис (синтаксис слів) ідентифікаторів — наприклад, це послідовність букв — але не може використовуватися там, де використовуються ідентифікатори. Наприклад, слово if
зазвичай є зарезервованим словом, тоді як x
ніколи не є зарезервованим словом, тому x = 1
є допустимим виразом, а if = 1
— ні.
Ключові слова мають різноманітне використання, але в першу чергу входять у кілька класів: частину фрази граматики (зокрема, правила продукції з нетермінальними символами), з різними значеннями, часто використовуваних для порядку виконання операцій, наприклад, слово if
в більшості процедурних мов задає умовний перехід і приймає умову (нетермінальні символи); імена примітивних типів мови, що підтримують систему типізації, наприклад int
; примітивні значення літералу, такі як true
для Boolean true; або іноді спеціальні команди, такі як exit
. Інші використання ключових слів у фразах призначено для введення/виводу, наприклад, print
.
Різні визначення зрозумілі, коли мова аналізується комбінацією лексичного і синтаксичного аналізатора, а синтаксис мови генерується [en] для слів, а контекстно-вільна граматика [en] (також називається правилом продукції) для фраз. Це характерно для аналізу сучасних мов, і в даному випадку ключові слова є підмножиною зарезервованих слів, оскільки вони повинні відрізнятися від ідентифікаторів на рівні слова (як зарезервовані слова) для синтаксичного аналізу відрізнятися на рівні фрази (як ключові слова).
У цьому випадку зарезервовані слова визначаються як частина лексичної граматики, і кожен з них маркується як окремий тип, відмінний від ідентифікаторів. Зазвичай зарезервовані слова, if
та then
, наприклад, маркуються як типи IF
і THEN
, відповідно, тоді як x
та y
обидва марковані як тип Identifier
.
Ключові слова, навпаки, синтаксично з'являються у фразі граматики, як термінальні символи. Наприклад, породжувальне правило для умовного виразу може бути IF Expression THEN Expression
. В цьому випадку IF
та THEN
— термінальні символи, які означають «токени типу IF
або THEN
, відповідно» — і згідно з граматикою це вказує на рядок if
або then
в первісному джерелі. Як приклад примітивного значення константи, true
може бути ключовим словом, що представляє логічне значення «true», у цьому випадку він повинен з'являтися в граматиці як можливе розширення BinaryExpression
, наприклад.
Зарезервовані діапазони
Окрім резервування конкретних списків слів, деякі мови резервують цілі діапазони слів, які використовуються як приватні простори для майбутньої версії мови, створення різних діалектів, для специфічних розширень для розробників компілятора або для внутрішнього використання компілятором, а особливо для [en].
Найчастіше це робиться за допомогою префікса, часто одного або декількох символів підкреслення. В C і C++ використовується ця можливість: C99 резервує ідентифікатори, які починаються з двох підкреслень або підкреслення, за якими йде літера верхнього регістру, і додатково зберігає ідентифікатори, які починаються з одного підкреслення (у звичайному і теговому просторах) для використання в ; C ++ 03 додатково зберігає ідентифікатори, які містять подвійне підкреслення в будь-якому місці — це дозволяє, наприклад, використовувати подвійне підкреслення як роздільник (для підключення ідентифікаторів користувача).
Часте використання подвійних підкреслень у внутрішніх ідентифікаторах в Python дало початок абревіатурі dunder; що була придумана Марком Джексоном [ 22 січня 2004 у Wayback Machine.] і незалежно Тімом Гохбергом, як відповідь на те ж питання в 2002 році, вони запропонували з різницею в декілька хвилин.
Специфікація
Список зарезервованих слів і ключових слів в мові визначається, коли мова розробляється, і обидва складають частину формальної специфікації мови. Зазвичай потрібно мінімізувати кількість зарезервованих слів, щоб уникнути обмеження дійсних імен ідентифікаторів. Крім того, введення нових зарезервованих слів ламає існуючі програми, які використовують це слово (вони не мають зворотньої сумісності). Щоб запобігти цьому і забезпечити [en], іноді резервують слова, які не використовують в даний момент (зарезервоване слово, яке не є ключовим словом), оскільки це дозволяє використовувати слово в майбутньому без порушення роботи вже створених програм. Або, нові функції мови можуть бути реалізовані як попередньо визначені, які можна перевизначити, таким чином не порушуючи роботу програм створених раніше.
Гнучкість також дає можливість розробникам компіляторів розширити специфікацію, включивши нестандартні функції, або створити різні стандарти мови, щоб розширити її, для майбутніх версій мови, або щоб додати нові функції. Наприклад, процедурна мова може передбачати додавання об'єктно-орієнтованих можливостей у майбутній версії або в якомусь іншому стандарті мови, після чого можна додати ключові слова, такі як class
або object
. Щоб задовольнити цю можливість, поточна специфікація може зарезервувати ці слова, навіть якщо вони в даний час не використовуються.
Показовим прикладом є Java, де const
та goto
є зарезервованими словами — вони не мають значення в Java, але вони також не можуть використовуватися як ідентифікатори. Якщо зарезервувати терміни, то вони можуть бути реалізовані в майбутніх версіях Java, за бажанням, без порушення старого вихідного коду Java. Наприклад, у 1999 році було запропоновано додати const
до мови Java, оскільки воно була зарезервованим, але наразі не використовується; Однак ця пропозиція була відхилена — зокрема, тому, що навіть незважаючи на додавання функції робота існуючих програм не буде порушеною, використовуючи const
в стандартній бібліотеці (а зокрема, в колекціях) буде порушуватись сумісність. JavaScript також містить ряд зарезервованих слів без особливої функціональності; точний список залежить від версії та режиму.
Мови істотно відрізняються тим, як часто вони запроваджують нові зарезервовані слова або ключові слова, і як вони називають їх, деякі мови дуже консервативні та вводять нові ключові слова рідко або навіть ніколи, щоб уникнути порушення існуючих програм, тоді як інші мови запроваджують нові ключові слова більш вільно, вимагаючи змінювати існуючі програми а саме змінювати ідентифікатори які конфліктують. Створили певні правила для додавання нових ключових слів в C11 порівняно з C++ 11, обидва з 2011 р. — нагадуємо, що в C і C++ ідентифікатори, які починаються з підкреслення, за яким йде літера верхнього регістру є зарезервованими:
Комітет С вважає, що краще не створювати нові ключові слова в просторі імен користувачів, оскільки, як правило, очікується, що кожна переробка чи оновлення С дозволить уникнути порушення сумісності зі старими програмами С. Для порівняння, комітет C++ (WG21) вважає, що краще створювати нові ключові слова як старі ключові слова. Наприклад, C++ 11 визначає нове ключове слово thread_local для позначення статичної пам'яті локальної для одного потоку. C11 визначає нове ключове слово як _Thread_local. У новому заголовку C11 <thread.h> існує визначення макроса, щоб забезпечити нормальне відображення імені:
- #define thread_local _Thread_local
Тобто, C11 представив ключове слово _Thread_local в межах існуючого набору зарезервованих слів (воно з певним префіксом), а потім використовував окремий об'єкт (обробка макросів), щоб дозволити його використання, так щоб б це було як нове ключове слово без префікса, а C++ 11 вводять ключове слово thread_local, незважаючи на те, що це не є існуючим зарезервованим словом, що може порушити деякі програми, які використовували його, але не вимагаючи обробки макросів.
Попередньо визначені імена
Пов'язаним поняттям зарезервованих слів є попередньо визначені функції, методи, підпрограми або змінні, зокрема бібліотека підпрограм зі стандартної бібліотеки. Вони подібні тим, що вони є частиною основної мови і можуть використовуватися для подібних цілей. Однак вони відрізняються тим, що назва попередньо визначеної функції, методу або підпрограми зазвичай класифікується як ідентифікатор замість зарезервованого слова і не розглядається спеціально в синтаксичному аналізі. Далі, зарезервовані слова не можуть бути перевизначені програмістом, але попередньо задані імена часто можуть бути перевизначені в певній мірі.
Мови відрізняються залежно від того, що задано як ключове слово, і що є попередньо визначеним іменем. Деякі мови, наприклад, забезпечують ключові слова для операцій введення / виводу, тоді як в інших це бібліотечні підпрограми. У Python (версії до 3.0) і багатьох діалектах BASIC print
є ключовим словом. А в C, Lisp і Python 3.0 printf
, format
і print
є функціями в стандартній бібліотеці. Аналогічно, в Python до 3.0, None
, True
і False
були попередньо визначені змінні, але не зарезервовані слова, але в Python 3.0 це зарезервовані слова.
Визначення
Деякі використовують терміни «ключове слово» та «зарезервоване слово» як взаємозамінні, в той час як інші розрізняють за використанням, скажімо, за допомогою «ключового слова» визначають слово, яке є спеціальним лише в певних контекстах, а «зарезервоване слово» означає спеціальне слово, яке не можна використовувати як визначене користувачем ім'я. Значення ключових слів — і суть поняття ключового слова — дуже відрізняється від мови до мови. Конкретно, в ALGOL 68 ключові слова є рядком (в суворих правилах мови, написані жирним шрифтом) і не є зарезервованими словами — слово яке не є рядком може використовуватися як звичайний ідентифікатор.
«Java Language Specification» використовує термін «ключове слово». Стандарт ISO 9899 для мови програмування C використовує термін «ключове слово».
У багатьох мовах, таких як C і подібні їй, як , ключове слово є зарезервованим словом, що ідентифікує синтаксичну форму. Слова, що використовуються в конструкціях потоків керування, такі як if
, then
та else
є ключовими словами. У цих мовах ключові слова також не можуть використовуватися як імена змінних або функцій.
У деяких мовах, таких як ALGOL і [en], ключові слова не можуть бути написані дослівно, а повинні бути позначені . Це означає, що ключові слова мають бути, або рядком, або позначені спеціальним префіксним символом. Як наслідок, ключові слова не є зарезервованими словами, і тому одне й те саме слово можна використовувати як звичайний ідентифікатор і як ключове слово.
Деякі мови, такі як PostScript, є надзвичайно ліберальними у цьому підході, дозволяючи перевизначити ключові слова для конкретних цілей.
У Common Lisp термін «ключове слово» (або «символ ключового слова») використовується для особливого роду [en] або ідентифікатора. На відміну від інших символів, які зазвичай стоять для змінних або функцій, ключові слова самостійно розцінюються і самообчислюються : 98 і їх [en] в пакеті KEYWORD . Ключові слова зазвичай використовуються для позначення назв аргументів функцій і для представлення символічних значень. Символи, які є іменами функцій, змінних, спеціальних форм та макросів в пакеті з назвою COMMON-LISP, є в основному зарезервованими словами. Ефект перевизначення їх не визначено в ANSI Common Lisp. Можливе їх прив'язування. Наприклад, вираз (if if case or)
є можливим, якщо if
є локальною змінною. Найбільш лівий, if
посилається на оператор if
; інші символи інтерпретуються як імена змінних. Оскільки існує окремий простір імен для функцій і змінних, if
може бути інтерпретована, як локальна змінна. У Common Lisp, однак, існують два спеціальних символи, які не містяться в пакеті ключових слів: символи t
і nil
. Коли вони обчислюються, як вирази, вони обчислюють себе. Вони не можуть бути використані як імена функцій або змінних, тому де-факто зарезервовані. (let ((t 42)))
є добре сформованим виразом, але оператор let
не дозволить використання.
Як правило, коли програміст намагається використати ключове слово для змінної або назви функції, виникне помилка компіляції. У більшості сучасних редакторів ключові слова автоматично визначаються, та мають певний колір тексту, щоб нагадати або повідомити програмістам, що вони є ключовими словами.
У мовах з макросами або лінивими обчисленнями конструкції потоків керування, такі як if
можуть бути реалізовані як макроси або функції. У мовах без цих виразних функцій вони зазвичай є ключовими словами.
Порівняння за мовою
Не всі мови мають однакову кількість зарезервованих слів. Наприклад, Java (та інші C-подібні мови) має досить малу кількість зарезервованих слів — приблизно 50 — тоді як COBOL має приблизно 400. А чистий Prolog і (PL/I) взагалі не мають.
Кількість зарезервованих слів на мові мало пов'язана з тим, наскільки «потужною» є мова. COBOL був розроблений у 1950-х роках як бізнес-мова і був зроблений як самодокументація з використанням англійських структурних елементів, таких як дієслова, статті, речення, розділи та підрозділи. C, з іншого боку, був написаний дуже суворо (синтаксично). Наприклад, порівняйте еквівалентні блоки коду з C і COBOL, щоб обчислити щотижневий прибуток:
// Обчислення на C: if (salaried) amount = 40 * payrate; else amount = hours * payrate;
*> Обчислення на COBOL: IF Salaried THEN MULTIPLY Payrate BY 40 GIVING Amount ELSE MULTIPLY Payrate BY Hours GIVING Amount END-IF.
*> Інший приклад обчислення на COBOL: IF Salaried COMPUTE Amount = Payrate * 40 ELSE COMPUTE Amount = hours * payrate END-IF.
Логіка чистого Prolog виражається в термінах залежностей, а виконання виконується за допомогою виконання запитів над цими залежностями. Конструкції, такі як цикл, реалізуються з використанням рекурсії.
Всі ці три мови можуть вирішувати однакові типи «проблем», навіть якщо вони мають різну кількість зарезервованих слів. Ця «потужність» пов'язана з їхньою приналежністю до множини мов, що входять до складу мов які є повними за Тюрингом.
Недоліки
Визначення зарезервованих слів викликає проблеми. Можливо, новим користувачам буде важко вивчати мову через довгий список зарезервованих слів, які слід запам'ятати, які не можна використовувати як ідентифікатори. Може бути важко розширити мову, оскільки додавання зарезервованих слів для нових функцій може призвести до непрацездатності існуючих програм або, навпаки, «перевантаження» існуючих зарезервованих слів новими значеннями може призвести до плутанини. Перенесення програм може бути проблематичним, оскільки слово, не зарезервоване однією системою / компілятором, може бути зарезервоване іншим.
Зарезервовані слова та мовна незалежність
Microsoft's .NET [en] дозволяє коду, написаному на 40+ різних мовах програмування, об'єднати в кінцевий продукт. Через це конфлікти ідентифікаторів / зарезервованих слів можуть відбуватися, коли код, реалізований однією мовою, намагається виконати код, написаний іншою мовою. Наприклад, бібліотека Visual Basic.NET може містити визначення класу, таке як:
' Визначення класу в Visual Basic.NET: Public Class this ' This class does something... End Class
Якщо це скомпільовано та розповсюджено як частину набору інструментів, програміст C#, який бажає визначити змінну типу «this
», може зіткнутися з проблемою: 'this'
є зарезервованим словом у C#. Таким чином, наступне не може бути скомпільованим в C#:
// Використання цього класу в C#: this x = new this(); // Не буде скомпільовано
Аналогічна проблема виникає при доступі до членів, перевизначенні віртуальних методів і ідентифікації просторів імен. Це вирішується за допомогою [en]. Для того, щоб усунути цю проблему, специфікація дозволяє програмісту розмістити (у C#) знак перед ідентифікатором, який змушує компілятор вважати його ідентифікатором, а не зарезервованим словом:
// Використання цього класу в C#: @this x = new @this(); // Буде скомпільовано!
Для узгодженості це використання також дозволено в непублічних параметрах, таких як локальні змінні, імена параметрів та приватні члени.
Див. також
Список літератури
- C99 specification, 7.1.3 Reserved identifiers
- C++03 specification, 17.4.3.2.1 Global names [lib.global.names]
- Jackson, Mark (26 вересня 2002). . python-list (Список розсилки). Архів оригіналу за 15 жовтня 2014. Процитовано 9 листопада 2014.
- Hochberg, Tim (26 вересня 2002). . python-list (Список розсилки). Архів оригіналу за 15 жовтня 2014. Процитовано 9 листопада 2014.
- Dunder (Double UNDERscore) Alias
- Notz, Pat (26 вересня 2002). . python-list (Список розсилки). Архів оригіналу за 15 жовтня 2014. Процитовано 9 листопада 2014.
- . Bugs.sun.com. Архів оригіналу за 3 листопада 2014. Процитовано 4 листопада 2014.
{{}}
: Назва URL містить вбудоване вікіпосилання () - . Архів оригіналу за 17 травня 2019. Процитовано 20 травня 2019.
- C99 specification, 7.1.3 Reserved identifiers: «All identifiers that begin with an underscore and either an uppercase letter or another underscore are always reserved for any use.»
- C11:The New C Standard [ 12 липня 2018 у Wayback Machine.], Thomas Plum, «A Note on Keywords»
- «The story of None, True and False (and an explanation of literals, keywords and builtins thrown in) [ 30 травня 2019 у Wayback Machine.]», The History of Python, November 10, 2013, Guido van Rossum
- . Sun Microsystems. 2000. Архів оригіналу за 13 лютого 2012. Процитовано 17 червня 2009.
The following character sequences, formed from ASCII letters, are reserved for use as keywords and cannot be used as identifiers[...]
- (PDF). International Organization for Standardization JTC1/SC22/WG14. 7 вересня 2007. Архів оригіналу (PDF) за 11 січня 2018. Процитовано 20 травня 2019.
The above tokens (case sensitive) are reserved (in translation phases 7 and 8) for use as keywords, and shall not be used otherwise.
- Peter Norvig: Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp, Morgan Kaufmann, 1991, , Web [ 2 січня 2010 у Wayback Machine.]
- Type KEYWORD [ 23 травня 2019 у Wayback Machine.] from the
- . Архів оригіналу за 28 березня 2016. Процитовано 20 травня 2019.
Посилання
- Зарезервоване слово [ 28 серпня 2019 у Wayback Machine.]
- Зарезервоване пошук слів: Пошук зарезервованих слів для широко використовуваних мов [ 22 травня 2019 у Wayback Machine.]
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Na komp yuternij movi zarezervovane slovo takozh vidome yak zarezervovanij identifikator ce slovo yake ne mozhe vikoristovuvatisya yak identifikator napriklad nazva zminnoyi funkciyi abo mitki vono zarezervovane vid vikoristannya Ce viznachene sintaksisom slovo i vono mozhe zovsim ne mati znachennya Dovoli blizkimi ye ponyattya zarezervovane slovo ta klyuchove slovo Ci slova mayut specialne znachennya v okremih vipadkah Ce viznacheno semantikoyu Ale imena v standartnij biblioteci yaki ne ye vbudovanimi v movu ne vvazhayutsya zarezervovanimi chi klyuchovimi slovami Termini zarezervovane slovo ta klyuchove slovo chasto vikoristovuyut yak vzayemnozaminni Pro zarezervovani slova mozhna skazati sho voni zarezervovani dlya vikoristannya yak klyuchovi slova a formalne vikoristannya zminyuyetsya zalezhno vid movi V osnovnomu zarezervovani ta klyuchovi slova ne povinni zbigatisya ale v najnovishih movah klyuchovi slova ye pidmnozhinoyu zarezervovanih ce robit parsing prostishim tak yak ne mozhlivo splutati klyuchovi slova z identifikatorami V deyakih movah takih yak S chi Python zarezervovani ta klyuchovi slova zbigayutsya koli v inshih movah yak Java vsi klyuchovi slova ye zarezervovanimi ale deyaki zarezervovani slova ne ye klyuchovimi voni ye zarezervovanimi dlya majbutnogo vikoristannya V starishih movah ALGOL FORTRAN i PL I ye klyuchovi slova ale nemaye zarezervovanih klyuchovi slova vidriznyalisya vid identifikatoriv v inshij sposib Ce robit parsing bilsh skladnim VidminnistNabori zarezervovanih ta klyuchovih sliv v movi chasto zbigayutsya abo ye majzhe odnakovimi i riznicya mizh nimi inkoli ye ne vidchutnoyu a ci termini chasto ye vzayemozaminnimi Odnak pri uvazhnomu vikoristanni ci termini vidriznyayutsya Yaksho zrobiti klyuchovi slova zarezervovanimi to ce polegshuye leksichnij analiz Tomu sho mozhna odnoznachno viznachiti chim ye ryadok simvoliv klyuchovim slovom chi identifikatorom Same tomu klyuchovi slova zazvichaj ye zarezervovanimi Odnak zarezervovani slova ne povinni buti klyuchovimi Yak priklad v movi Java ye zarezervovane slovo goto ale vono ne maye niyakogo znachennya i vono ne zustrichayetsya v zhodnih pravilah stvorennya gramatik Ce zrobleno dlya en u majbutnih versiyah zarezervovani slova mozhut stati klyuchovimi i ce ne vimagatime zmin u vzhe nayavnih programah Z inshogo boku klyuchovi slova ne povinni buti zarezervovanimi yih rol zrozumila z kontekstu abo voni mayut rozriznyatis u inshij sposib takij yak en Napriklad viraz if 1 ye odnoznachnim u bilshosti gramatik oskilki umova v operatori if ne mozhe pochinatisya zi znaka tomu taki virazi dozvoleni u deyakih movah zokrema u FORTRAN V ALGOL 68 klyuchovi slova mayut buti pevnim chinom poznacheni v suvorij movi voni poznachayutsya zhirnim shriftom i takim chinom voni ne ye zarezervovanimi Otzhe nastupnij viraz ye pravilnim klyuchove slovo if yake vidilene zhirnim shriftom ne bude konfliktuvati zi zvichajnim identifikatorom if if if eq 0 then 1 fi Prote v en isnuye takozh rezhim stropping v yakomu klyuchovi slova ye zarezervovanimi slovami sho ye prikladom togo yak ci rizni ponyattya chasto zbigayutsya bagato suchasnih mov takozh sliduyut comu pravilu SintaksisDokladnishe Sintaksis programuvannya Zarezervovane slovo ce slovo yake viglyadaye yak zvichajne slovo ale ne mozhe vikoristovuvatisya yak zvichajne slovo Formalno ce oznachaye sho vono zadovolnyaye zvichajnij sintaksis sintaksis sliv identifikatoriv napriklad ce poslidovnist bukv ale ne mozhe vikoristovuvatisya tam de vikoristovuyutsya identifikatori Napriklad slovo if zazvichaj ye zarezervovanim slovom todi yak x nikoli ne ye zarezervovanim slovom tomu x 1 ye dopustimim virazom a if 1 ni Klyuchovi slova mayut riznomanitne vikoristannya ale v pershu chergu vhodyat u kilka klasiv chastinu frazi gramatiki zokrema pravila produkciyi z neterminalnimi simvolami z riznimi znachennyami chasto vikoristovuvanih dlya poryadku vikonannya operacij napriklad slovo if v bilshosti procedurnih mov zadaye umovnij perehid i prijmaye umovu neterminalni simvoli imena primitivnih tipiv movi sho pidtrimuyut sistemu tipizaciyi napriklad int primitivni znachennya literalu taki yak true dlya Boolean true abo inodi specialni komandi taki yak exit Inshi vikoristannya klyuchovih sliv u frazah priznacheno dlya vvedennya vivodu napriklad print Rizni viznachennya zrozumili koli mova analizuyetsya kombinaciyeyu leksichnogo i sintaksichnogo analizatora a sintaksis movi generuyetsya en dlya sliv a kontekstno vilna gramatika en takozh nazivayetsya pravilom produkciyi dlya fraz Ce harakterno dlya analizu suchasnih mov i v danomu vipadku klyuchovi slova ye pidmnozhinoyu zarezervovanih sliv oskilki voni povinni vidriznyatisya vid identifikatoriv na rivni slova yak zarezervovani slova dlya sintaksichnogo analizu vidriznyatisya na rivni frazi yak klyuchovi slova U comu vipadku zarezervovani slova viznachayutsya yak chastina leksichnoyi gramatiki i kozhen z nih markuyetsya yak okremij tip vidminnij vid identifikatoriv Zazvichaj zarezervovani slova if ta then napriklad markuyutsya yak tipi IF i THEN vidpovidno todi yak x ta y obidva markovani yak tip Identifier Klyuchovi slova navpaki sintaksichno z yavlyayutsya u frazi gramatiki yak terminalni simvoli Napriklad porodzhuvalne pravilo dlya umovnogo virazu mozhe buti IF Expression THEN Expression V comu vipadku IF ta THEN terminalni simvoli yaki oznachayut tokeni tipu IF abo THEN vidpovidno i zgidno z gramatikoyu ce vkazuye na ryadok if abo then v pervisnomu dzhereli Yak priklad primitivnogo znachennya konstanti true mozhe buti klyuchovim slovom sho predstavlyaye logichne znachennya true u comu vipadku vin povinen z yavlyatisya v gramatici yak mozhlive rozshirennya BinaryExpression napriklad Zarezervovani diapazoniOkrim rezervuvannya konkretnih spiskiv sliv deyaki movi rezervuyut cili diapazoni sliv yaki vikoristovuyutsya yak privatni prostori dlya majbutnoyi versiyi movi stvorennya riznih dialektiv dlya specifichnih rozshiren dlya rozrobnikiv kompilyatora abo dlya vnutrishnogo vikoristannya kompilyatorom a osoblivo dlya en Najchastishe ce robitsya za dopomogoyu prefiksa chasto odnogo abo dekilkoh simvoliv pidkreslennya V C i C vikoristovuyetsya cya mozhlivist C99 rezervuye identifikatori yaki pochinayutsya z dvoh pidkreslen abo pidkreslennya za yakimi jde litera verhnogo registru i dodatkovo zberigaye identifikatori yaki pochinayutsya z odnogo pidkreslennya u zvichajnomu i tegovomu prostorah dlya vikoristannya v C 03 dodatkovo zberigaye identifikatori yaki mistyat podvijne pidkreslennya v bud yakomu misci ce dozvolyaye napriklad vikoristovuvati podvijne pidkreslennya yak rozdilnik dlya pidklyuchennya identifikatoriv koristuvacha Chaste vikoristannya podvijnih pidkreslen u vnutrishnih identifikatorah v Python dalo pochatok abreviaturi dunder sho bula pridumana Markom Dzheksonom 22 sichnya 2004 u Wayback Machine i nezalezhno Timom Gohbergom yak vidpovid na te zh pitannya v 2002 roci voni zaproponuvali z rizniceyu v dekilka hvilin SpecifikaciyaSpisok zarezervovanih sliv i klyuchovih sliv v movi viznachayetsya koli mova rozroblyayetsya i obidva skladayut chastinu formalnoyi specifikaciyi movi Zazvichaj potribno minimizuvati kilkist zarezervovanih sliv shob uniknuti obmezhennya dijsnih imen identifikatoriv Krim togo vvedennya novih zarezervovanih sliv lamaye isnuyuchi programi yaki vikoristovuyut ce slovo voni ne mayut zvorotnoyi sumisnosti Shob zapobigti comu i zabezpechiti en inodi rezervuyut slova yaki ne vikoristovuyut v danij moment zarezervovane slovo yake ne ye klyuchovim slovom oskilki ce dozvolyaye vikoristovuvati slovo v majbutnomu bez porushennya roboti vzhe stvorenih program Abo novi funkciyi movi mozhut buti realizovani yak poperedno viznacheni yaki mozhna pereviznachiti takim chinom ne porushuyuchi robotu program stvorenih ranishe Gnuchkist takozh daye mozhlivist rozrobnikam kompilyatoriv rozshiriti specifikaciyu vklyuchivshi nestandartni funkciyi abo stvoriti rizni standarti movi shob rozshiriti yiyi dlya majbutnih versij movi abo shob dodati novi funkciyi Napriklad procedurna mova mozhe peredbachati dodavannya ob yektno oriyentovanih mozhlivostej u majbutnij versiyi abo v yakomus inshomu standarti movi pislya chogo mozhna dodati klyuchovi slova taki yak class abo object Shob zadovolniti cyu mozhlivist potochna specifikaciya mozhe zarezervuvati ci slova navit yaksho voni v danij chas ne vikoristovuyutsya Pokazovim prikladom ye Java de const ta goto ye zarezervovanimi slovami voni ne mayut znachennya v Java ale voni takozh ne mozhut vikoristovuvatisya yak identifikatori Yaksho zarezervuvati termini to voni mozhut buti realizovani v majbutnih versiyah Java za bazhannyam bez porushennya starogo vihidnogo kodu Java Napriklad u 1999 roci bulo zaproponovano dodati const do movi Java oskilki vono bula zarezervovanim ale narazi ne vikoristovuyetsya Odnak cya propoziciya bula vidhilena zokrema tomu sho navit nezvazhayuchi na dodavannya funkciyi robota isnuyuchih program ne bude porushenoyu vikoristovuyuchi const v standartnij biblioteci a zokrema v kolekciyah bude porushuvatis sumisnist JavaScript takozh mistit ryad zarezervovanih sliv bez osoblivoyi funkcionalnosti tochnij spisok zalezhit vid versiyi ta rezhimu Movi istotno vidriznyayutsya tim yak chasto voni zaprovadzhuyut novi zarezervovani slova abo klyuchovi slova i yak voni nazivayut yih deyaki movi duzhe konservativni ta vvodyat novi klyuchovi slova ridko abo navit nikoli shob uniknuti porushennya isnuyuchih program todi yak inshi movi zaprovadzhuyut novi klyuchovi slova bilsh vilno vimagayuchi zminyuvati isnuyuchi programi a same zminyuvati identifikatori yaki konfliktuyut Stvorili pevni pravila dlya dodavannya novih klyuchovih sliv v C11 porivnyano z C 11 obidva z 2011 r nagaduyemo sho v C i C identifikatori yaki pochinayutsya z pidkreslennya za yakim jde litera verhnogo registru ye zarezervovanimi Komitet S vvazhaye sho krashe ne stvoryuvati novi klyuchovi slova v prostori imen koristuvachiv oskilki yak pravilo ochikuyetsya sho kozhna pererobka chi onovlennya S dozvolit uniknuti porushennya sumisnosti zi starimi programami S Dlya porivnyannya komitet C WG21 vvazhaye sho krashe stvoryuvati novi klyuchovi slova yak stari klyuchovi slova Napriklad C 11 viznachaye nove klyuchove slovo thread local dlya poznachennya statichnoyi pam yati lokalnoyi dlya odnogo potoku C11 viznachaye nove klyuchove slovo yak Thread local U novomu zagolovku C11 lt thread h gt isnuye viznachennya makrosa shob zabezpechiti normalne vidobrazhennya imeni define thread local Thread local Tobto C11 predstaviv klyuchove slovo Thread local v mezhah isnuyuchogo naboru zarezervovanih sliv vono z pevnim prefiksom a potim vikoristovuvav okremij ob yekt obrobka makrosiv shob dozvoliti jogo vikoristannya tak shob b ce bulo yak nove klyuchove slovo bez prefiksa a C 11 vvodyat klyuchove slovo thread local nezvazhayuchi na te sho ce ne ye isnuyuchim zarezervovanim slovom sho mozhe porushiti deyaki programi yaki vikoristovuvali jogo ale ne vimagayuchi obrobki makrosiv Poperedno viznacheni imenaPov yazanim ponyattyam zarezervovanih sliv ye poperedno viznacheni funkciyi metodi pidprogrami abo zminni zokrema biblioteka pidprogram zi standartnoyi biblioteki Voni podibni tim sho voni ye chastinoyu osnovnoyi movi i mozhut vikoristovuvatisya dlya podibnih cilej Odnak voni vidriznyayutsya tim sho nazva poperedno viznachenoyi funkciyi metodu abo pidprogrami zazvichaj klasifikuyetsya yak identifikator zamist zarezervovanogo slova i ne rozglyadayetsya specialno v sintaksichnomu analizi Dali zarezervovani slova ne mozhut buti pereviznacheni programistom ale poperedno zadani imena chasto mozhut buti pereviznacheni v pevnij miri Movi vidriznyayutsya zalezhno vid togo sho zadano yak klyuchove slovo i sho ye poperedno viznachenim imenem Deyaki movi napriklad zabezpechuyut klyuchovi slova dlya operacij vvedennya vivodu todi yak v inshih ce bibliotechni pidprogrami U Python versiyi do 3 0 i bagatoh dialektah BASIC print ye klyuchovim slovom A v C Lisp i Python 3 0 printf format i print ye funkciyami v standartnij biblioteci Analogichno v Python do 3 0 None True i False buli poperedno viznacheni zminni ale ne zarezervovani slova ale v Python 3 0 ce zarezervovani slova ViznachennyaDeyaki vikoristovuyut termini klyuchove slovo ta zarezervovane slovo yak vzayemozaminni v toj chas yak inshi rozriznyayut za vikoristannyam skazhimo za dopomogoyu klyuchovogo slova viznachayut slovo yake ye specialnim lishe v pevnih kontekstah a zarezervovane slovo oznachaye specialne slovo yake ne mozhna vikoristovuvati yak viznachene koristuvachem im ya Znachennya klyuchovih sliv i sut ponyattya klyuchovogo slova duzhe vidriznyayetsya vid movi do movi Konkretno v ALGOL 68 klyuchovi slova ye ryadkom v suvorih pravilah movi napisani zhirnim shriftom i ne ye zarezervovanimi slovami slovo yake ne ye ryadkom mozhe vikoristovuvatisya yak zvichajnij identifikator Java Language Specification vikoristovuye termin klyuchove slovo Standart ISO 9899 dlya movi programuvannya C vikoristovuye termin klyuchove slovo U bagatoh movah takih yak C i podibni yij yak C klyuchove slovo ye zarezervovanim slovom sho identifikuye sintaksichnu formu Slova sho vikoristovuyutsya v konstrukciyah potokiv keruvannya taki yak if then ta else ye klyuchovimi slovami U cih movah klyuchovi slova takozh ne mozhut vikoristovuvatisya yak imena zminnih abo funkcij U deyakih movah takih yak ALGOL i en klyuchovi slova ne mozhut buti napisani doslivno a povinni buti poznacheni Ce oznachaye sho klyuchovi slova mayut buti abo ryadkom abo poznacheni specialnim prefiksnim simvolom Yak naslidok klyuchovi slova ne ye zarezervovanimi slovami i tomu odne j te same slovo mozhna vikoristovuvati yak zvichajnij identifikator i yak klyuchove slovo Deyaki movi taki yak PostScript ye nadzvichajno liberalnimi u comu pidhodi dozvolyayuchi pereviznachiti klyuchovi slova dlya konkretnih cilej U Common Lisp termin klyuchove slovo abo simvol klyuchovogo slova vikoristovuyetsya dlya osoblivogo rodu en abo identifikatora Na vidminu vid inshih simvoliv yaki zazvichaj stoyat dlya zminnih abo funkcij klyuchovi slova samostijno rozcinyuyutsya i samoobchislyuyutsya 98 i yih en v paketi KEYWORD Klyuchovi slova zazvichaj vikoristovuyutsya dlya poznachennya nazv argumentiv funkcij i dlya predstavlennya simvolichnih znachen Simvoli yaki ye imenami funkcij zminnih specialnih form ta makrosiv v paketi z nazvoyu COMMON LISP ye v osnovnomu zarezervovanimi slovami Efekt pereviznachennya yih ne viznacheno v ANSI Common Lisp Mozhlive yih priv yazuvannya Napriklad viraz if if case or ye mozhlivim yaksho if ye lokalnoyu zminnoyu Najbilsh livij if posilayetsya na operator if inshi simvoli interpretuyutsya yak imena zminnih Oskilki isnuye okremij prostir imen dlya funkcij i zminnih if mozhe buti interpretovana yak lokalna zminna U Common Lisp odnak isnuyut dva specialnih simvoli yaki ne mistyatsya v paketi klyuchovih sliv simvoli t i nil Koli voni obchislyuyutsya yak virazi voni obchislyuyut sebe Voni ne mozhut buti vikoristani yak imena funkcij abo zminnih tomu de fakto zarezervovani let t 42 ye dobre sformovanim virazom ale operator let ne dozvolit vikoristannya Yak pravilo koli programist namagayetsya vikoristati klyuchove slovo dlya zminnoyi abo nazvi funkciyi vinikne pomilka kompilyaciyi U bilshosti suchasnih redaktoriv klyuchovi slova avtomatichno viznachayutsya ta mayut pevnij kolir tekstu shob nagadati abo povidomiti programistam sho voni ye klyuchovimi slovami U movah z makrosami abo linivimi obchislennyami konstrukciyi potokiv keruvannya taki yak if mozhut buti realizovani yak makrosi abo funkciyi U movah bez cih viraznih funkcij voni zazvichaj ye klyuchovimi slovami Porivnyannya za movoyuNe vsi movi mayut odnakovu kilkist zarezervovanih sliv Napriklad Java ta inshi C podibni movi maye dosit malu kilkist zarezervovanih sliv priblizno 50 todi yak COBOL maye priblizno 400 A chistij Prolog i PL I vzagali ne mayut Kilkist zarezervovanih sliv na movi malo pov yazana z tim naskilki potuzhnoyu ye mova COBOL buv rozroblenij u 1950 h rokah yak biznes mova i buv zroblenij yak samodokumentaciya z vikoristannyam anglijskih strukturnih elementiv takih yak diyeslova statti rechennya rozdili ta pidrozdili C z inshogo boku buv napisanij duzhe suvoro sintaksichno Napriklad porivnyajte ekvivalentni bloki kodu z C i COBOL shob obchisliti shotizhnevij pributok Obchislennya na C if salaried amount 40 payrate else amount hours payrate gt Obchislennya na COBOL IF Salaried THEN MULTIPLY Payrate BY 40 GIVING Amount ELS E MULTIPLY Payrate BY Hours GIVING Amount END IF gt Inshij priklad obchislennya na COBOL IF Salaried COMPUTE Amount Payrate 40 ELSE COMPUTE Amount hours payrate END IF Logika chistogo Prolog virazhayetsya v terminah zalezhnostej a vikonannya vikonuyetsya za dopomogoyu vikonannya zapitiv nad cimi zalezhnostyami Konstrukciyi taki yak cikl realizuyutsya z vikoristannyam rekursiyi Vsi ci tri movi mozhut virishuvati odnakovi tipi problem navit yaksho voni mayut riznu kilkist zarezervovanih sliv Cya potuzhnist pov yazana z yihnoyu prinalezhnistyu do mnozhini mov sho vhodyat do skladu mov yaki ye povnimi za Tyuringom NedolikiViznachennya zarezervovanih sliv viklikaye problemi Mozhlivo novim koristuvacham bude vazhko vivchati movu cherez dovgij spisok zarezervovanih sliv yaki slid zapam yatati yaki ne mozhna vikoristovuvati yak identifikatori Mozhe buti vazhko rozshiriti movu oskilki dodavannya zarezervovanih sliv dlya novih funkcij mozhe prizvesti do nepracezdatnosti isnuyuchih program abo navpaki perevantazhennya isnuyuchih zarezervovanih sliv novimi znachennyami mozhe prizvesti do plutanini Perenesennya program mozhe buti problematichnim oskilki slovo ne zarezervovane odniyeyu sistemoyu kompilyatorom mozhe buti zarezervovane inshim Zarezervovani slova ta movna nezalezhnistMicrosoft s NET en dozvolyaye kodu napisanomu na 40 riznih movah programuvannya ob yednati v kincevij produkt Cherez ce konflikti identifikatoriv zarezervovanih sliv mozhut vidbuvatisya koli kod realizovanij odniyeyu movoyu namagayetsya vikonati kod napisanij inshoyu movoyu Napriklad biblioteka Visual Basic NET mozhe mistiti viznachennya klasu take yak Viznachennya klasu v Visual Basic NET Public Class this This class does something End Class Yaksho ce skompilovano ta rozpovsyudzheno yak chastinu naboru instrumentiv programist C yakij bazhaye viznachiti zminnu tipu this mozhe zitknutisya z problemoyu this ye zarezervovanim slovom u C Takim chinom nastupne ne mozhe buti skompilovanim v C Vikoristannya cogo klasu v C this x new this Ne bude skompilovano Analogichna problema vinikaye pri dostupi do chleniv pereviznachenni virtualnih metodiv i identifikaciyi prostoriv imen Ce virishuyetsya za dopomogoyu en Dlya togo shob usunuti cyu problemu specifikaciya dozvolyaye programistu rozmistiti u C znak pered identifikatorom yakij zmushuye kompilyator vvazhati jogo identifikatorom a ne zarezervovanim slovom Vikoristannya cogo klasu v C this x new this Bude skompilovano Dlya uzgodzhenosti ce vikoristannya takozh dozvoleno v nepublichnih parametrah takih yak lokalni zminni imena parametriv ta privatni chleni Div takozhSpisok zarezervovanih sliv movi Java en Spisok literaturiC99 specification 7 1 3 Reserved identifiers C 03 specification 17 4 3 2 1 Global names lib global names Jackson Mark 26 veresnya 2002 python list Spisok rozsilki Arhiv originalu za 15 zhovtnya 2014 Procitovano 9 listopada 2014 Hochberg Tim 26 veresnya 2002 python list Spisok rozsilki Arhiv originalu za 15 zhovtnya 2014 Procitovano 9 listopada 2014 Dunder Double UNDERscore Alias Notz Pat 26 veresnya 2002 python list Spisok rozsilki Arhiv originalu za 15 zhovtnya 2014 Procitovano 9 listopada 2014 Bugs sun com Arhiv originalu za 3 listopada 2014 Procitovano 4 listopada 2014 a href wiki D0 A8 D0 B0 D0 B1 D0 BB D0 BE D0 BD Cite web title Shablon Cite web cite web a Nazva URL mistit vbudovane vikiposilannya dovidka Arhiv originalu za 17 travnya 2019 Procitovano 20 travnya 2019 C99 specification 7 1 3 Reserved identifiers All identifiers that begin with an underscore and either an uppercase letter or another underscore are always reserved for any use C11 The New C Standard 12 lipnya 2018 u Wayback Machine Thomas Plum A Note on Keywords The story of None True and False and an explanation of literals keywords and builtins thrown in 30 travnya 2019 u Wayback Machine The History of Python November 10 2013 Guido van Rossum Sun Microsystems 2000 Arhiv originalu za 13 lyutogo 2012 Procitovano 17 chervnya 2009 The following character sequences formed from ASCII letters are reserved for use as keywords and cannot be used as identifiers PDF International Organization for Standardization JTC1 SC22 WG14 7 veresnya 2007 Arhiv originalu PDF za 11 sichnya 2018 Procitovano 20 travnya 2019 The above tokens case sensitive are reserved in translation phases 7 and 8 for use as keywords and shall not be used otherwise Peter Norvig Paradigms of Artificial Intelligence Programming Case Studies in Common Lisp Morgan Kaufmann 1991 ISBN 1 55860 191 0 Web 2 sichnya 2010 u Wayback Machine Type KEYWORD 23 travnya 2019 u Wayback Machine from the Arhiv originalu za 28 bereznya 2016 Procitovano 20 travnya 2019 PosilannyaZarezervovane slovo 28 serpnya 2019 u Wayback Machine Zarezervovane poshuk sliv Poshuk zarezervovanih sliv dlya shiroko vikoristovuvanih mov 22 travnya 2019 u Wayback Machine