Зарезервоване словоНа комп'ютерній мові зарезервоване слово (також відоме як зарезервований ідентифікатор) — це слово, яке не може використовуватися як ідентифікатор, наприклад, назва змінної, функції або мітки — воно «зарезервоване від використання». Це визначене синтаксисом слово і воно може зовсім не мати значення. Доволі близькими є поняття «зарезервоване слово» та «ключове слово». Ці слова мають спеціальне значення в окремих випадках. Це визначено семантикою. Але імена в стандартній бібліотеці, які не є вбудованими в мову не вважаються зарезервованими чи ключовими словами. Терміни «зарезервоване слово» та «ключове слово» часто використовують як взаємнозамінні. Про зарезервовані слова можна сказати, що вони «зарезервовані для використання як ключові слова», а формальне використання змінюється залежно від мови. В основному зарезервовані та ключові слова не повинні збігатися, але в найновіших мовах ключові слова є підмножиною зарезервованих, це робить парсинг простішим так як не можливо сплутати ключові слова з ідентифікаторами. В деяких мовах, таких як, С чи Python, зарезервовані та ключові слова збігаються, коли в інших мовах, як Java, всі ключові слова є зарезервованими, але деякі зарезервовані слова не є ключовими, вони є «зарезервованими для майбутнього використання». В старіших мовах, ALGOL, FORTRAN, і PL/I, є ключові слова, але немає зарезервованих, ключові слова відрізнялися від ідентифікаторів в інший спосіб. Це робить парсинг більш складним. ВідмінністьНабори зарезервованих та ключових слів в мові часто збігаються або є майже однаковими, і різниця між ними інколи є не відчутною, а ці терміни часто є взаємозамінними. Однак при уважному використанні ці терміни відрізняються. Якщо зробити ключові слова зарезервованими, то це полегшує лексичний аналіз. Тому що можна однозначно визначити чим є рядок символів, ключовим словом чи ідентифікатором. Саме тому ключові слова зазвичай є зарезервованими. Однак зарезервовані слова не повинні бути ключовими. Як приклад в мові Java є зарезервоване слово З іншого боку ключові слова не повинні бути зарезервованими, їх роль зрозуміла з контексту, або вони мають розрізнятись у інший спосіб, такий, як строппінг[en]. Наприклад вираз
Проте в ALGOL 68[en] існує також режим stropping, в якому ключові слова є зарезервованими словами, що є прикладом того, як ці різні поняття часто збігаються; багато сучасних мов також слідують цьому правилу. СинтаксисЗарезервоване слово — це слово, яке «виглядає як» звичайне слово, але не може використовуватися як звичайне слово. Формально це означає, що воно задовольняє звичайний синтаксис (синтаксис слів) ідентифікаторів — наприклад, це послідовність букв — але не може використовуватися там, де використовуються ідентифікатори. Наприклад, слово Ключові слова мають різноманітне використання, але в першу чергу входять у кілька класів: частину фрази граматики (зокрема, правила продукції з нетермінальними символами), з різними значеннями, часто використовуваних для порядку виконання операцій, наприклад, слово Різні визначення зрозумілі, коли мова аналізується комбінацією лексичного і синтаксичного аналізатора, а синтаксис мови генерується лексичною граматикою[en] для слів, а контекстно-вільна граматика правилом породження[en] (також називається правилом продукції) для фраз. Це характерно для аналізу сучасних мов, і в даному випадку ключові слова є підмножиною зарезервованих слів, оскільки вони повинні відрізнятися від ідентифікаторів на рівні слова (як зарезервовані слова) для синтаксичного аналізу відрізнятися на рівні фрази (як ключові слова). У цьому випадку зарезервовані слова визначаються як частина лексичної граматики, і кожен з них маркується як окремий тип, відмінний від ідентифікаторів. Зазвичай зарезервовані слова, Ключові слова, навпаки, синтаксично з'являються у фразі граматики, як термінальні символи. Наприклад, породжувальне правило для умовного виразу може бути Зарезервовані діапазониОкрім резервування конкретних списків слів, деякі мови резервують цілі діапазони слів, які використовуються як приватні простори для майбутньої версії мови, створення різних діалектів, для специфічних розширень для розробників компілятора або для внутрішнього використання компілятором, а особливо для декорації імен. Найчастіше це робиться за допомогою префікса, часто одного або декількох символів підкреслення. В C і C++ використовується ця можливість: C99 резервує ідентифікатори, які починаються з двох підкреслень або підкреслення, за якими йде літера верхнього регістру, і додатково зберігає ідентифікатори, які починаються з одного підкреслення (у звичайному і теговому просторах) для використання в файлу;[1] C ++ 03 додатково зберігає ідентифікатори, які містять подвійне підкреслення в будь-якому місці[2] — це дозволяє, наприклад, використовувати подвійне підкреслення як роздільник (для підключення ідентифікаторів користувача). Часте використання подвійних підкреслень у внутрішніх ідентифікаторах в Python дало початок абревіатурі dunder; що була придумана Марком Джексоном [Архівовано 22 січня 2004 у Wayback Machine.][3] і незалежно Тімом Гохбергом,[4] як відповідь на те ж питання в 2002 році[5][6], вони запропонували з різницею в декілька хвилин. СпецифікаціяСписок зарезервованих слів і ключових слів в мові визначається, коли мова розробляється, і обидва складають частину формальної специфікації мови. Зазвичай потрібно мінімізувати кількість зарезервованих слів, щоб уникнути обмеження дійсних імен ідентифікаторів. Крім того, введення нових зарезервованих слів ламає існуючі програми, які використовують це слово (вони не мають зворотньої сумісності). Щоб запобігти цьому і забезпечити пряму сумісність[en], іноді резервують слова, які не використовують в даний момент (зарезервоване слово, яке не є ключовим словом), оскільки це дозволяє використовувати слово в майбутньому без порушення роботи вже створених програм. Або, нові функції мови можуть бути реалізовані як попередньо визначені, які можна перевизначити, таким чином не порушуючи роботу програм створених раніше. Гнучкість також дає можливість розробникам компіляторів розширити специфікацію, включивши нестандартні функції, або створити різні стандарти мови, щоб розширити її, для майбутніх версій мови, або щоб додати нові функції. Наприклад, процедурна мова може передбачати додавання об'єктно-орієнтованих можливостей у майбутній версії або в якомусь іншому стандарті мови, після чого можна додати ключові слова, такі як Показовим прикладом є Java, де Мови істотно відрізняються тим, як часто вони запроваджують нові зарезервовані слова або ключові слова, і як вони називають їх, деякі мови дуже консервативні та вводять нові ключові слова рідко або навіть ніколи, щоб уникнути порушення існуючих програм, тоді як інші мови запроваджують нові ключові слова більш вільно, вимагаючи змінювати існуючі програми а саме змінювати ідентифікатори які конфліктують. Створили певні правила для додавання нових ключових слів в C11 порівняно з C++ 11, обидва з 2011 р. — нагадуємо, що в C і C++ ідентифікатори, які починаються з підкреслення, за яким йде літера верхнього регістру є зарезервованими:[9]
Тобто, C11 представив ключове слово _Thread_local в межах існуючого набору зарезервованих слів (воно з певним префіксом), а потім використовував окремий об'єкт (обробка макросів), щоб дозволити його використання, так щоб б це було як нове ключове слово без префікса, а C++ 11 вводять ключове слово thread_local, незважаючи на те, що це не є існуючим зарезервованим словом, що може порушити деякі програми, які використовували його, але не вимагаючи обробки макросів. Попередньо визначені іменаПов'язаним поняттям зарезервованих слів є попередньо визначені функції, методи, підпрограми або змінні, зокрема бібліотека підпрограм зі стандартної бібліотеки. Вони подібні тим, що вони є частиною основної мови і можуть використовуватися для подібних цілей. Однак вони відрізняються тим, що назва попередньо визначеної функції, методу або підпрограми зазвичай класифікується як ідентифікатор замість зарезервованого слова і не розглядається спеціально в синтаксичному аналізі. Далі, зарезервовані слова не можуть бути перевизначені програмістом, але попередньо задані імена часто можуть бути перевизначені в певній мірі. Мови відрізняються залежно від того, що задано як ключове слово, і що є попередньо визначеним іменем. Деякі мови, наприклад, забезпечують ключові слова для операцій введення / виводу, тоді як в інших це бібліотечні підпрограми. У Python (версії до 3.0) і багатьох діалектах BASIC ВизначенняДеякі використовують терміни «ключове слово» та «зарезервоване слово» як взаємозамінні, в той час як інші розрізняють за використанням, скажімо, за допомогою «ключового слова» визначають слово, яке є спеціальним лише в певних контекстах, а «зарезервоване слово» означає спеціальне слово, яке не можна використовувати як визначене користувачем ім'я. Значення ключових слів — і суть поняття ключового слова — дуже відрізняється від мови до мови. Конкретно, в ALGOL 68 ключові слова є рядком (в суворих правилах мови, написані жирним шрифтом) і не є зарезервованими словами — слово яке не є рядком може використовуватися як звичайний ідентифікатор. «Java Language Specification» використовує термін «ключове слово».[12] Стандарт ISO 9899 для мови програмування C використовує термін «ключове слово».[13] У багатьох мовах, таких як C і подібні їй, як C++, ключове слово є зарезервованим словом, що ідентифікує синтаксичну форму. Слова, що використовуються в конструкціях потоків керування, такі як У деяких мовах, таких як ALGOL і ALGOL 68[en], ключові слова не можуть бути написані дослівно, а повинні бути позначені . Це означає, що ключові слова мають бути, або рядком, або позначені спеціальним префіксним символом. Як наслідок, ключові слова не є зарезервованими словами, і тому одне й те саме слово можна використовувати як звичайний ідентифікатор і як ключове слово. Деякі мови, такі як PostScript, є надзвичайно ліберальними у цьому підході, дозволяючи перевизначити ключові слова для конкретних цілей. У Common Lisp термін «ключове слово» (або «символ ключового слова») використовується для особливого роду символу[en] або ідентифікатора. На відміну від інших символів, які зазвичай стоять для змінних або функцій, ключові слова самостійно розцінюються і самообчислюються[14] : 98 і їх інтерновано[en] в пакеті KEYWORD .[15] Ключові слова зазвичай використовуються для позначення назв аргументів функцій і для представлення символічних значень. Символи, які є іменами функцій, змінних, спеціальних форм та макросів в пакеті з назвою COMMON-LISP, є в основному зарезервованими словами. Ефект перевизначення їх не визначено в ANSI Common Lisp.[16] Можливе їх прив'язування. Наприклад, вираз Як правило, коли програміст намагається використати ключове слово для змінної або назви функції, виникне помилка компіляції. У більшості сучасних редакторів ключові слова автоматично визначаються, та мають певний колір тексту, щоб нагадати або повідомити програмістам, що вони є ключовими словами. У мовах з макросами або лінивими обчисленнями конструкції потоків керування, такі як Порівняння за мовоюНе всі мови мають однакову кількість зарезервованих слів. Наприклад, 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 Common Language Infrastructure[en] дозволяє коду, написаному на 40+ різних мовах програмування, об'єднати в кінцевий продукт. Через це конфлікти ідентифікаторів / зарезервованих слів можуть відбуватися, коли код, реалізований однією мовою, намагається виконати код, написаний іншою мовою. Наприклад, бібліотека Visual Basic.NET може містити визначення класу, таке як: ' Визначення класу в Visual Basic.NET:
Public Class this
' This class does something...
End Class
Якщо це скомпільовано та розповсюджено як частину набору інструментів, програміст C#, який бажає визначити змінну типу « // Використання цього класу в C#:
this x = new this(); // Не буде скомпільовано
Аналогічна проблема виникає при доступі до членів, перевизначенні віртуальних методів і ідентифікації просторів імен. Це вирішується за допомогою строппінгу[en]. Для того, щоб усунути цю проблему, специфікація дозволяє програмісту розмістити (у C#) знак перед ідентифікатором, який змушує компілятор вважати його ідентифікатором, а не зарезервованим словом: // Використання цього класу в C#:
@this x = new @this(); // Буде скомпільовано!
Для узгодженості це використання також дозволено в непублічних параметрах, таких як локальні змінні, імена параметрів та приватні члени. Див. такожСписок літератури
Посилання
|
Portal di Ensiklopedia Dunia