У рачунарском језику, резервисана реч (такође позната као резервисани идентификатор) је реч која не може да се користи као идентификатор, на пример то су име променљиве, функције, или лабеле - они су "резервисани из употребе". Ово је синтаксичка дефиниција, а резервисана реч можда нема никаквог смисла.

Појам који је уско повезан и појам са којим се често меша је кључна реч која је реч са посебним значењем у одређеном контексту. Ово је семантичка дефиниција. Насупрот томе, имена у стандардној библиотеци која нису уграђена у језику се не сматрају резервисаним речима или кључним речима. Изрази "резервисана реч" и "кључна реч" често се користе као синоними - може се рећи да је резервисана реч "резервисана за употребу као кључна реч" - и формална примена варира од језика до језика; за овај чланак ми је разликујемо као што је горе наведено.

У принципу резервисане речи и кључне речи не морају да се поклапају, и у већини модерних језика кључне речи су одвојене од резервисаних речи, то чини граматичко рашчлањавање лакшим, и од тада је кључне речи не могуће мешати са идентификаторима. У неким језицима, као што су С или Пајтон, резервисане речи и кључне речи се поклапају, док у другим језицима, као у Јави, све кључне речи су резервисане речи, али неке резервисане речи нису кључне речи - оне су "резервисане за будућу употребу". У осталим језицима, као што су Алгол и PL/I постоје кључне речи али не и резервисане речи, и кључне речи се разликују од идентификатора по другим значењима.

Разлика Сетови резервисаних речи и кључних речи у језику често се поклапају или су скоро једнаки, а разлика је суптилна, тако да се ови термини често користе као синоними. Међутим, у пажљивој употреби се разликују.

Претварање кључних речи у резервисане речи чини лексичку анализу лакшом, тако ће низ знакова бити недвосмислено или кључна реч или идентификатор, без контексне зависности; тако су кључне речи обично подскупови резервисаних речи. Међутим, резервисане речи не морају бити кључне речи - на пример, у Јави, goto је резервисана реч, али она нема значење и не појављује се у било ком производном правилу у граматици. То се обично ради за наредну компатибилност, тако да резервисана реч може постати кључна реч у будућој верзији без разбијања постојећег програма.

Супротно томе, кључне речи не морају бити резервисане речи, са њиховом улогом која је разумљива из контекста, или се могу издвојити на други начин, као нпр. стропирањем. На пример, фраза if = 1 је недвосмислена у већини граматика, јер контролна изјаве if члана не може почети са =, и ово је дозвољено у неким језицима, нпр у ФОРТРАНУ. Алтернативно, у АЛГОЛ 68, кључне речи морају бити стропиране - обележене на неки истакнути начин - у строгом језику наводећи их подебљаним словима, и према томе оне нису резервисане речи. Тако је у строгом језику следећи израз легалан, подебљана кључна реч if није у супротности са обичним идентификатором if: if if eq 0 then 1 fi Међутим, у Алгол 68 постоји стропирани режим у коме су кључне речи резервисане речи, то је пример како се ови различити концепти често поклапају; ово је праћено у многим модерним језицима.

Syntax Резервисана реч је она која "изгледа као" нормална реч, али јој није дозвољено да се користи као нормална реч. Формално то значи да задовољава уобичајене лексичке синтаксе (синтаксе речи) идентификатора - пример је, низ слова - али он се не може користити тамо где су идентификатори коришћени. На пример, реч if је обично резервисана реч, докx генерално није, па је тако x = 1 валидан задатак, али if = 1 није.

Кључне речи имају различите употребе, али се пре свега разврставају у неколико класа као што су: класа дела граматике фразе (посебно правило производње са нетерминалним симболима), класа са различитим значењима, класа која се често користи за контролу тока, класа као реч if која се користи у већини процедуралних језика, класа која указује на услове и узима чланове (нетерминалне симболе); имена примитивних типова у језику који подржава тип система, као што је int; примитибна литерална вредност као што је true за Булово тачно; или понекад посебне команде као што су exit. Друга употреба кључних речи је у фразама за убацивање / избацивање, таква реч је print.

Одвојене дефиниције су јасне када се језик анализира комбинацијом лексера и парсера, и синтакса језика је генерисана од стране лексичке граматике за речи, и контекстно слободне граматике правила производње за фразе. То је уобичајено у анализи модерних језика, а у овом случају кључне речи су одвојене од резервисаних речи, јер се морају разликовати од идентификатора на нивоу речи (дакле резервисаних речи) да би се синтаксички анализирали другачије на нивоу фраза (као кључних речи).

У овом случају резервисане речи су дефинисане као део лексичке граматике, и свака је означена као посебан тип, који је различит од идентификатора. У конвенционалном обележавању, резервисане речи if и then на пример су означене као типови IF и THEN,  док су x и y обоје означени као тип Identifier.

Кључне речи, се напротив, синтаксички појављују у граматици фразе, као терминални симболи. На пример, правило производње условне изјаве може бити IF Expression THEN Expression. Уовом случају IF и THEN су терминални симболи, што значи да је "тип симбола IF или THEN" – и због лексичке граматике, ту се мисли на ниску if или then у оригиналном извору. Пример примитивне константне вредности, true може бити кључна реч која редставља логичку вредност "тачно", у том случају би требало да се појави у граматици као могуће проширење производњеBinaryExpression, за инстанцу.

Резервисани опсег Осим резервисаних специфичних листа речи, неки језици резервишу целе опсеге речи, користе их као приватне просторе за будуће верзије језика, различите дијалекте, компилаторе продаваце-специфична проширења, или за интерну употребу од стране компилатора, посебно у комадању имена.

Ово се најчешће врши помоћу префикса, обично једне или више доњих црта. С и C++ су познати у том смислу: С99 резервише идентификаторе које почињу са две доње црте или када је доња црта праћена великим словом, и касније резервише идентификаторе који почињу са једном доњом цртом (у редовним и означеним просторима) за употребу у оквиру фајлова;C99 specification, 7.1.3 Reserved identifiers са C++ 03 даље резервише идентификаторе који садрже двоструке црте било гдеC++03 specification, 17.4.3.2.1 Global names [lib.global.names]- што омогућава коришћење двоструке доње црте као сепаратора (за повезивање корисничких идентификатора), на пример.

Честа употреба двоструких доњих црта у унутрашњим идентификаторима у Пајтону довела је до скраћенице dunder; ово је направио Mark Jackson Jackson, Mark (Sep 26, 2002). и независно Tim Hochberg,Hochberg, Tim (Sep 26, 2002). у размаку од неколико минута, обојица као одговор на исто питање у 2002. години.Dunder (Double UNDERscore) AliasNotz, Pat (Sep 26, 2002).

Појединости Листе резервисаних речи и кључних речи у језику су дефинисане када је развијен језик, и обе форме су саставни део формалне спецификације језика. Генерално жеља је да се смањи број резервисаних речи, да би се избегло ограничење валидних имена идентификатора. Даље, увођењем нових резервисаних речи разбијају се постојећи програми који користе ту реч (то није компатибилно), тако да се то избегава. Да бисте спречили ово и пружили будућу компатибилност, понекад су речи резервисане без текуће употребе (резервисана реч која није кључна реч), јер то омогућава да се реч користи у будућности без разбијања постојећих програма. Алтернативно, нове карактеристике језика могу се спровести као предефинисане, што се може превазићи, стога не разбијајте постојеће програме.

Разлози за флексибилност су ти да се продавцу копилатора да могућност да прошири спецификацију укључујући и не-стандардне карактеристике, различите стандардне језичке дијалекте, или да у будуће верзије језика укључи додатне функције. На пример, процедурални језик може предвидети додавање објектно оријентисаних могућности у будућу верзију или неки дијалект, у коме би се могле додати кључне речи као class или object. Да би се прилагодили овој могућности, садашња спецификација ће можда направити ове резервисане речи, чак и ако се оне тренутно не користе.

Значајан пример је Јава, где су const и goto резервисане речи - оне немају значење у Јави, и оне се такође не могу користити као идентификатори. По резервисању термина, они се могу реализовати у будућим верзијама Јаве, ако се то буду желело, без разбијања старијег Јавиног изворног кода. На пример, постојао је предлог 1999. године да се дода C++-као const на језику, што је било могуће помоћу const речи, од тада је резервисана али није до сада коришћена; Међутим, овај предлог је одбијен - иако додавање ове функције не би сломило извшење програма, коришћење у стандардној библиотеци (посебно у колекцијама) би сломило компатибилност. .  Јаваскрипт такође садржи велики број резервисаних речи без посебне функционалности; тачан списак варира у зависности од верзије и мода.Lexical grammar: Keywords

Сви идентификатори који почињу са доњом цртом или било великим словом или другом доњом цртом су увек резервисани за сваку употребу. Сви идентификатори који почињу са доњом цртом су увек резервисане за употребу као идентификатори са обимом датотеке у редовним и означеним просторима.

Језици се значајно разликују у томе колико често уводе нове резервисане речи или кључне речи и како их називају, уз то неки језици су врло конзервативни и уводе нове речи ретко или никада, како би избегли разбијање постојећег програма, док други језици уведе нове кључне речи слободније, захтевајући од постојећих програма да промене постојеће идентификаторе који праве проблем. Студија случаја је дата новим кључним речима у С11 у поређењу са  C++11, оба из 2011. године - ово подсећа на С и C++, идентификатори који почињу са доњом цртом и затим великим словом су резервисани: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."

То је, С11 је представио кључну реч _Thread_local у оквиру постојећег сета резервисаних речи (оних са одређеним префиксом), и затим користе посебан објекат (макро обраду) како би се омогућило његово коришћење као да је нова кључна реч без префикса, док C++ 11 уводи кључну реч thread_local и упркос томе што ово није постојећа резервисана реч, разбија све програме који је користе, али без потребе макро обраде.

Предефинисана имена Сродани појмови за резервисане речи су унапред дефинисана функција, методе, подпрограми, или променљиве, а посебно библиотека рутине из стандардне библиотеке. Они су слични по томе што су део основног језика, а могу се користити за сличне сврхе. Међутим, они се разликују по томе што је назив претходно дефинисане функције, метода или потпрограма обично категорисан као идентификатор уместо као резервисана реч, а није посебно третиран у синтаксичкој анализи. Даље, резервисане речи не могу бити предефинисане од стране програмера, али речи које су унапред дефинисане се често могу занемарити у неком својству.

Језици се разликују шта је означено као кључна реч и шта као унапред дефинисана реч. Неки језици, на пример, означавају кључне речи за улазне / излазне операције док је у другим језицима то библиотека рутине. У Пајтону (у верзијама старијим од 3.0) и многим Бејсик дијалектима, print је кључна реч. Насупрот томе, у С, Lisp, Пајтон 3.0 еквиваленти printf, format, и print су функције у стандардној библиотеци. Слично томе, у Пајтону до 3.0, None, True, и False су унапред дефинисане променљиве, али нису резервисане речи, али у Пајтону 3.0 оне су претводене у резервисане речи."The story of None, True and False (and an explanation of literals, keywords and builtins thrown in)", The History of Python, November 10, 2013, Guido van Rossum

Дефиниција