In a
computer language
A computer language is a formal language used to communicate with a computer. Types of computer languages include:
* Construction language – all forms of communication by which a human can specify an executable problem solution to a compu ...
, a reserved word (also known as a reserved identifier) is a word that cannot be used as an
identifier
An identifier is a name that identifies (that is, labels the identity of) either a unique object or a unique ''class'' of objects, where the "object" or class may be an idea, physical countable object (or class thereof), or physical noncountable ...
, such as the name of a variable, function, or
label
A label (as distinct from signage) is a piece of paper, plastic film, cloth, metal, or other material affixed to a container or product, on which is written or printed information or symbols about the product or item. Information printed dir ...
– it is "reserved from use". This is a
syntactic
In linguistics, syntax () is the study of how words and morphemes combine to form larger units such as phrases and sentences. Central concerns of syntax include word order, grammatical relations, hierarchical sentence structure (constituency), ...
definition, and a reserved word may have no user-defined meaning.
A closely related and often conflated notion is a keyword, which is a word with special meaning in a particular context. This is a
semantic
Semantics (from grc, σημαντικός ''sēmantikós'', "significant") is the study of reference, meaning, or truth. The term can be used to refer to subfields of several distinct disciplines, including philosophy, linguistics and comput ...
definition. By contrast, names in a
standard library
In computer programming, a standard library is the library made available across implementations of a programming language. These libraries are conventionally described in programming language specifications; however, contents of a language's as ...
but not built into the language are not considered reserved words or keywords. The terms "reserved word" and "keyword" are often used interchangeably – one may say that a reserved word is "reserved for use as a keyword" – and formal use varies from language to language; for this article we distinguish as above.
In general reserved words and keywords need not coincide, but in most modern languages keywords are a subset of reserved words, as this makes parsing easier, since keywords cannot be confused with identifiers. In some languages, like C or Python, reserved words and keywords coincide, while in other languages, like Java, all keywords are reserved words, but some reserved words are not keywords – these are "reserved for future use". In yet other languages, such as the older languages
ALGOL
ALGOL (; short for "Algorithmic Language") is a family of imperative computer programming languages originally developed in 1958. ALGOL heavily influenced many other languages and was the standard method for algorithm description used by the ...
,
FORTRAN and
PL/I
PL/I (Programming Language One, pronounced and sometimes written PL/1) is a procedural, imperative computer programming language developed and published by IBM. It is designed for scientific, engineering, business and system programming. I ...
, there are keywords but no reserved words, with keywords being distinguished from identifiers by other means.
Distinction
The sets of reserved words and keywords in a language often coincide or are almost equal, and the distinction is subtle, so the terms are often used interchangeably. However, in careful usage they are distinguished.
Making keywords be reserved words makes
lexing
In computer science, lexical analysis, lexing or tokenization is the process of converting a sequence of characters (such as in a computer program or web page) into a sequence of ''lexical tokens'' ( strings with an assigned and thus identified ...
easier, as a string of characters will unambiguously be either a keyword or an identifier, without depending on context; thus keywords are usually a subset of reserved words. However, reserved words need not be keywords – for example, in Java,
goto
is a reserved word, but has no meaning and does not appear in any production rules in the grammar. This is usually done for
forward compatibility
Forward compatibility or upward compatibility is a design characteristic that allows a system to accept input intended for a later version of itself. The concept can be applied to entire systems, electrical interfaces, telecommunication signals, d ...
, so a reserved word may become a keyword in a future version without breaking existing programs.
Conversely, keywords need not be reserved words, with their role understood from context, or they may be distinguished in another manner, such as by
stropping. For example, the phrase
if = 1
is unambiguous in most grammars, since a control statement of an if clause cannot start with an
=
, and thus is allowed in some languages, such as
FORTRAN. Alternatively, in
ALGOL 68
ALGOL 68 (short for ''Algorithmic Language 1968'') is an imperative programming language that was conceived as a successor to the ALGOL 60 programming language, designed with the goal of a much wider scope of application and more rigorously de ...
, keywords must be stropped – marked in some way to distinguished – in the strict language by listing in bold, and thus are not reserved words. Thus in the strict language the following expression is legal, as the bold keyword if does not conflict with the ordinary identifier
if
:
:if if eq 0 then 1 fi
However, in ALGOL 68 there is also a stropping regime in which keywords are reserved words, an example of how these distinct concepts often coincide; this is followed in many modern languages.
Syntax
A reserved word is one that "looks like" a normal word, but is not allowed to be used as a normal word. Formally this means that it satisfies the usual
lexical syntax
In computer science, lexical analysis, lexing or tokenization is the process of converting a sequence of Character (computing), characters (such as in a computer program or web page) into a sequence of ''lexical tokens'' (String (computer science ...
(syntax of words) of identifiers – for example, being a sequence of letters – but cannot be used where identifiers are used. For example, the word
if
is commonly a reserved word, while
x
generally is not, so
x = 1
is a valid assignment, but
if = 1
is not.
Keywords have varied uses, but primarily fall into a few classes: part of the phrase grammar (specifically a
production rule with
nonterminal symbol
In computer science, terminal and nonterminal symbols are the lexical elements used in specifying the production rules constituting a formal grammar. ''Terminal symbols'' are the elementary symbols of the language defined by a formal grammar. ...
s), with various meanings, often being used for
control flow
In computer science, control flow (or flow of control) is the order in which individual statements, instructions or function calls of an imperative program are executed or evaluated. The emphasis on explicit control flow distinguishes an ''imper ...
, such as the word
if
in most procedural languages, which indicates a
conditional and takes clauses (the nonterminal symbols); names of primitive types in a language that support a
type system
In computer programming, a type system is a logical system comprising a set of rules that assigns a property called a type to every "term" (a word, phrase, or other set of symbols). Usually the terms are various constructs of a computer progra ...
, such as
int
; primitive
literal values such as
true
for Boolean true; or sometimes special commands like
exit
. Other uses of keywords in phrases are for input/output, such as
print
.
The distinct definitions are clear when a language is analyzed by a combination of a lexer and a parser, and the syntax of the language is generated by a
lexical grammar In computer science, a lexical grammar is a formal grammar defining the syntax of tokens. The program is written using characters that are defined by the lexical structure of the language used. The character set is equivalent to the alphabet used b ...
for the words, and a
context-free grammar
In formal language theory, a context-free grammar (CFG) is a formal grammar whose production rules are of the form
:A\ \to\ \alpha
with A a ''single'' nonterminal symbol, and \alpha a string of terminals and/or nonterminals (\alpha can be empt ...
of
production rules for the phrases. This is common in analyzing modern languages, and in this case keywords are a subset of reserved words, as they must be distinguished from identifiers at the word level (hence reserved words) to be syntactically analyzed differently at the phrase level (as keywords).
In this case reserved words are defined as part of the lexical grammar, and are each tokenized as a separate type, distinct from identifiers. In conventional notation, the reserved words
if
and
then
for example are tokenized as types
IF
and
THEN
, respectively, while
x
and
y
are both tokenized as type
Identifier
.
Keywords, by contrast, syntactically appear in the phrase grammar, as
terminal symbol
In computer science, terminal and nonterminal symbols are the lexical elements used in specifying the production rules constituting a formal grammar. ''Terminal symbols'' are the elementary symbols of the language defined by a formal grammar. ...
s. For example, the production rule for a conditional expression may be
IF Expression THEN Expression
. In this case
IF
and
THEN
are terminal symbols, meaning "a token of type
IF
or
THEN
, respectively" – and due to the lexical grammar, this means the string
if
or
then
in the original source. As an example of a primitive constant value,
true
may be a keyword representing the boolean value "true", in which case it should appear in the grammar as a possible expansion of the production
BinaryExpression
, for instance.
Reserved ranges
Beyond reserving specific lists of words, some languages reserve entire ranges of words, for use as private spaces for future language version, different dialects, compiler vendor-specific extensions, or for internal use by a compiler, notably in
name mangling
In compiler construction, name mangling (also called name decoration) is a technique used to solve various problems caused by the need to resolve unique names for programming entities in many modern programming languages.
It provides a way of e ...
.
This is most often done by using a prefix, often one or more
underscore
An underscore, ; also called an underline, low line, or low dash; is a line drawn under a segment of text. In proofreading, underscoring is a convention that says "set this text in italic type", traditionally used on Manuscript (publishing), man ...
s. C and C++ are notable in this respect: C99 reserves identifiers that start with two underscores or an underscore followed by an uppercase letter, and further reserves identifiers that start with a single underscore (in the ordinary and tag spaces) for use in
file scope
In computer programming, the scope of a name binding (an association of a name to an entity, such as a variable) is the part of a program where the name binding is valid; that is, where the name can be used to refer to the entity. In other parts o ...
; with C++03 further reserves identifiers that contain a double underscore anywhere – this allows the use of a double underscore as a separator (to connect user identifiers), for instance.
The frequent use of a double underscores in internal identifiers in Python gave rise to the abbreviation ''dunder;'' this was coined by Mark Jackson and independently by Tim Hochberg, within minutes of each other, both in reply to the same question in 2002.
Specification
The list of reserved words and keywords in a language are defined when a language is developed, and both form part of a language's
formal specification
In computer science, formal specifications are mathematically based techniques whose purpose are to help with the implementation of systems and software. They are used to describe a system, to analyze its behavior, and to aid in its design by verif ...
. Generally one wishes to minimize the number of reserved words, to avoid restricting valid identifier names. Further, introducing new reserved words breaks existing programs that use that word (it is not backwards compatible), so this is avoided. To prevent this and provide
forward compatibility
Forward compatibility or upward compatibility is a design characteristic that allows a system to accept input intended for a later version of itself. The concept can be applied to entire systems, electrical interfaces, telecommunication signals, d ...
, sometimes words are reserved without having a current use (a reserved word that is not a keyword), as this allows the word to be used in future without breaking existing programs. Alternatively, new language features can be implemented as predefineds, which can be overridden, thus not breaking existing programs.
Reasons for flexibility include allowing compiler vendors to extend the specification by including non-standard features, different standard dialects of language to extend it, or future versions of the language to include additional features. For example, a procedural language may anticipate adding
object-oriented
Object-oriented programming (OOP) is a programming paradigm based on the concept of "objects", which can contain data and code. The data is in the form of fields (often known as attributes or ''properties''), and the code is in the form of pro ...
capabilities in a future version or some dialect, at which point one might add keywords like
class
or
object
. To accommodate this possibility, the current specification may make these reserved words, even if they are not currently used.
A notable example is in
Java
Java (; id, Jawa, ; jv, ꦗꦮ; su, ) is one of the Greater Sunda Islands in Indonesia. It is bordered by the Indian Ocean to the south and the Java Sea to the north. With a population of 151.6 million people, Java is the world's List ...
, where
const
and
goto
are reserved words — they have no meaning in Java but they also cannot be used as identifiers. By reserving the terms, they can be implemented in future versions of Java, if desired, without breaking older Java source code. For example, there was a proposal in 1999 to add C++-like
const
to the language, which was possible using the
const
word, since it was reserved but currently unused; however, this proposal was rejected – notably because even though adding the feature would not break any existing programs, using it in the standard library (notably in collections) ''would'' break compatibility.
JavaScript
JavaScript (), often abbreviated as JS, is a programming language that is one of the core technologies of the World Wide Web, alongside HTML and CSS. As of 2022, 98% of Website, websites use JavaScript on the Client (computing), client side ...
also contains a number of reserved words without special functionality; the exact list varies by version and mode.
Languages differ significantly in how frequently they introduce new reserved words or keywords and how they name them, with some languages being very conservative and introducing new keywords rarely or never, to avoid breaking existing programs, while other languages introduce new keywords more freely, requiring existing programs to change existing identifiers that conflict. A case study is given by new keywords in
C11 C11, C.XI, C-11 or C.11 may refer to:
Transport
* C-11 Fleetster, a 1920s American light transport aircraft for use of the United States Assistant Secretary of War
* Fokker C.XI, a 1935 Dutch reconnaissance seaplane
* LET C-11, a license-build var ...
compared with
C++11
C++11 is a version of the ISO/IEC 14882 standard for the C++ programming language. C++11 replaced the prior version of the C++ standard, called C++03, and was later replaced by C++14. The name follows the tradition of naming language versions by ...
, both from 2011 – recall that in C and C++, identifiers that begin with an underscore followed by an uppercase letter are reserved:
That is, C11 introduced the keyword
_Thread_local
within an existing set of reserved words (those with a certain prefix), and then used a separate facility (macro processing) to allow its use as if it were a new keyword without any prefixing, while C++11 introduce the keyword
thread_local
despite this not being an existing reserved word, breaking any programs that used this, but without requiring macro processing.
Predefined names
A related notion to reserved words are predefined functions, methods, subroutines, types, or variables, particularly
library routines from the standard library. These are similar in that they are part of the basic language, and may be used for similar purposes. However, these differ in that the name of one of these entities is typically categorized as an identifier instead of a reserved word, and is not treated specially in the syntactic analysis. Further, reserved words may not be redefined by the programmer, but predefineds can often be overridden for the extent of some
scope
Scope or scopes may refer to:
People with the surname
* Jamie Scope (born 1986), English footballer
* John T. Scopes (1900–1970), central figure in the Scopes Trial regarding the teaching of evolution
Arts, media, and entertainment
* Cinem ...
.
Languages vary as to what is provided as a keyword and what is a predefined. Some languages, for instance, provide keywords for input/output operations whereas in others these are library routines. In
Python
Python may refer to:
Snakes
* Pythonidae, a family of nonvenomous snakes found in Africa, Asia, and Australia
** ''Python'' (genus), a genus of Pythonidae found in Africa and Asia
* Python (mythology), a mythical serpent
Computing
* Python (pro ...
(versions earlier than 3.0) and many
BASIC
BASIC (Beginners' All-purpose Symbolic Instruction Code) is a family of general-purpose, high-level programming languages designed for ease of use. The original version was created by John G. Kemeny and Thomas E. Kurtz at Dartmouth College ...
dialects,
print
is a keyword. In contrast, the C, Lisp, and Python 3.0 equivalents
printf
,
format
, and
print
are functions in the standard library. Similarly, in Python prior to 3.0,
None
,
True
, and
False
were predefined variables, but not reserved words, but in Python 3.0 they were made into reserved words.
[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
Definition
Some use the terms "keyword" and "reserved word" interchangeably, while others distinguish usage, say by using "keyword" to mean a word that is special only in certain contexts but "reserved word" to mean a special word that cannot be used as a user-defined name. The meaning of keywords — and, indeed, the meaning of the notion of ''keyword'' — differs widely from language to language. Concretely, in ALGOL 68, keywords are stropped (in the strict language, written in bold) and are not reserved words – the unstropped word can be used as an ordinary identifier.
The "
Java Language
Java is a high-level, class-based, object-oriented programming language that is designed to have as few implementation dependencies as possible. It is a general-purpose programming language intended to let programmers ''write once, run any ...
Specification" uses the term "keyword". The ISO 9899 standard for the
C programming language
''The C Programming Language'' (sometimes termed ''K&R'', after its authors' initials) is a computer programming book written by Brian Kernighan and Dennis Ritchie, the latter of whom originally designed and implemented the language, as well as ...
uses the term "keyword".
In many languages, such as
C and similar environments like
C++
C++ (pronounced "C plus plus") is a high-level general-purpose programming language created by Danish computer scientist Bjarne Stroustrup as an extension of the C programming language, or "C with Classes". The language has expanded significan ...
, a ''keyword'' is a reserved word which identifies a syntactic form. Words used in
control flow
In computer science, control flow (or flow of control) is the order in which individual statements, instructions or function calls of an imperative program are executed or evaluated. The emphasis on explicit control flow distinguishes an ''imper ...
constructs, such as
if
,
then
, and
else
are keywords. In these languages, keywords cannot also be used as the names of variables or functions.
In some languages, such as
ALGOL
ALGOL (; short for "Algorithmic Language") is a family of imperative computer programming languages originally developed in 1958. ALGOL heavily influenced many other languages and was the standard method for algorithm description used by the ...
and
Algol 68
ALGOL 68 (short for ''Algorithmic Language 1968'') is an imperative programming language that was conceived as a successor to the ALGOL 60 programming language, designed with the goal of a much wider scope of application and more rigorously de ...
, keywords cannot be written verbatim, but must be
stropped. This means that keywords must be marked somehow. E.g. by quoting them or by prefixing them by a special character. As a consequence, keywords are not reserved words, and thus the same word can be used for as a normal identifier. However, one stropping regime was to not strop the keywords, and instead have them simply be reserved words.
Some languages, such as
PostScript
PostScript (PS) is a page description language in the electronic publishing and desktop publishing realm. It is a dynamically typed, concatenative programming language. It was created at Adobe Systems by John Warnock, Charles Geschke, Doug Br ...
, are extremely liberal in this approach, allowing core keywords to be redefined for specific purposes.
In
Common Lisp
Common Lisp (CL) is a dialect of the Lisp programming language, published in ANSI standard document ''ANSI INCITS 226-1994 (S20018)'' (formerly ''X3.226-1994 (R1999)''). The Common Lisp HyperSpec, a hyperlinked HTML version, has been derived fro ...
, the term "keyword" (or "keyword symbol") is used for a special sort of
symbol
A symbol is a mark, sign, or word that indicates, signifies, or is understood as representing an idea, object, or relationship. Symbols allow people to go beyond what is known or seen by creating linkages between otherwise very different conc ...
, or identifier. Unlike other symbols, which usually stand for variables or functions, keywords are self-
quoting and self-evaluating
:98 and are
interned
Internment is the imprisonment of people, commonly in large groups, without charges or intent to file charges. The term is especially used for the confinement "of enemy citizens in wartime or of terrorism suspects". Thus, while it can simply ...
in the
KEYWORD
package. Keywords are usually used to label named arguments to functions, and to represent symbolic values. The symbols which name functions, variables, special forms and macros in the package named COMMON-LISP are basically reserved words. The effect of redefining them is undefined in ANSI Common Lisp. Binding them is possible. For instance the expression
(if if case or)
is possible, when
if
is a local variable. The leftmost
if
refers to the
if
operator; the remaining symbols are interpreted as variable names. Since there is a separate namespace for functions and variables,
if
could be a local variable. In Common Lisp, however, there are two special symbols which are not in the keyword package: the symbols
t
and
nil
. When evaluated as expressions, they evaluate to themselves. They cannot be used as the names of functions or variables, so are de facto reserved.
(let ((t 42)))
is a well-formed expression, but the
let
operator will not permit the usage.
Typically, when a programmer attempts to use a keyword for a variable or function name, a compilation error will be triggered. In most modern editors, the keywords are automatically set to have a particular text colour to remind or inform the programmers that they are keywords.
In languages with
macros or
lazy evaluation
In programming language theory, lazy evaluation, or call-by-need, is an evaluation strategy which delays the evaluation of an expression until its value is needed (non-strict evaluation) and which also avoids repeated evaluations (sharing).
The b ...
, control flow constructs such as
if
can be implemented as macros or functions. In languages without these expressive features, they are generally keywords.
Comparison by languages
Not all languages have the same numbers of reserved words. For example, Java (and other
C derivatives) has a rather sparse complement of reserved words—approximately 50 – whereas
COBOL
COBOL (; an acronym for "common business-oriented language") is a compiled English-like computer programming language designed for business use. It is an imperative, procedural and, since 2002, object-oriented language. COBOL is primarily us ...
has approximately 400. At the other end of the spectrum, pure
Prolog
Prolog is a logic programming language associated with artificial intelligence and computational linguistics.
Prolog has its roots in first-order logic, a formal logic, and unlike many other programming languages, Prolog is intended primarily ...
and PL/I have none at all.
Disadvantages
Definition of reserved words in a language raises problems. The language may be difficult for new users to learn because of a long list of reserved words to memorize which can't be used as identifiers. It may be difficult to extend the language because addition of reserved words for new features might invalidate existing programs or, conversely, "overloading" of existing reserved words with new meanings can be confusing. Porting programs can be problematic because a word not reserved by one system/compiler might be reserved by another.
Because reserved words cannot be used as identifiers, users may choose deliberate misspellings of reserved words as identifiers instead, such as for Java variables of type .
Reserved words and language independence
Microsoft's
.NET Common Language Infrastructure (CLI) specification allows code written in 40+ different programming languages to be combined into a final product. Because of this, identifier/reserved word collisions can occur when code implemented in one language tries to execute code written in another language. For example, a
Visual Basic.NET
Visual Basic, originally called Visual Basic .NET (VB.NET), is a multi-paradigm, object-oriented programming language, implemented on .NET, Mono, and the .NET Framework. Microsoft launched VB.NET in 2002 as the successor to its original Vis ...
library may contain a
class
Class or The Class may refer to:
Common uses not otherwise categorized
* Class (biology), a taxonomic rank
* Class (knowledge representation), a collection of individuals or objects
* Class (philosophy), an analytical concept used differentl ...
definition such as:
' Class Definition of This in Visual Basic.NET:
Public Class this
' This class does something...
End Class
If this is compiled and distributed as part of a toolbox, a
C# programmer, wishing to define a variable of type “
this
” would encounter a problem:
'this'
is a reserved word in C#. Thus, the following will not compile in C#:
// Using This Class in C#:
this x = new this(); // Won't compile!
A similar issue arises when accessing members, overriding
virtual method
In object-oriented programming, in languages such as C++, and Object Pascal, a virtual function or virtual method is an inheritable and overridable function or method for which dynamic dispatch is facilitated. This concept is an important part o ...
s, and identifying namespaces.
This is resolved by
stropping. In order to work around this issue, the specification allows the programmer to (in C#) place the
at-sign
The at sign, , is normally read aloud as "at"; it is also commonly called the at symbol, commercial at, or address sign. It is used as an accounting and invoice abbreviation meaning "at a rate of" (e.g. 7 widgets @ £2 per widget = £14), but ...
before the identifier which forces it to be considered an identifier rather than a reserved word by the compiler:
// Using This Class in C#:
@this x = new @this(); // Will compile!
For consistency, this usage is also permitted in non-public settings such as local variables, parameter names, and private members.
See also
*
C reserved keywords
*
List of Java keywords
In the Java programming language, a keyword is any one of 67 reserved words that have a predefined meaning in the language. Because of this, programmers cannot use keywords in some contexts, such as names for variables, methods, classes, or as a ...
*
Symbol (programming)
A symbol in computer programming is a primitive data type whose instances have a unique human-readable form. Symbols can be used as identifiers. In some programming languages, they are called atoms. Uniqueness is enforced by holding them in a sym ...
References
{{refend
Programming constructs
Programming language topics