Difference between revisions of "Reserved words"
m (Reverted edits by Trev (talk) to last revision by PascalDragon) Tag: Rollback |
(Returned my edits to the page which I accidentally removed :-) |
||
Line 4: | Line 4: | ||
The keywords of the individual <!---[[Compiler Mode|compiler modes]]--->[[:Category:Modes|compiler modes]] are summarized as follows: | The keywords of the individual <!---[[Compiler Mode|compiler modes]]--->[[:Category:Modes|compiler modes]] are summarized as follows: | ||
+ | |||
* [[Mode TP|Turbo Pascal mode]]: the [[Turbo Pascal]] keywords are available for you to use | * [[Mode TP|Turbo Pascal mode]]: the [[Turbo Pascal]] keywords are available for you to use | ||
* [[Mode Delphi | Delphi mode]]: the Turbo Pascal and Object Pascal keywords are available for you to use | * [[Mode Delphi | Delphi mode]]: the Turbo Pascal and Object Pascal keywords are available for you to use | ||
* [[Mode ObjFPC | Extended Free Pascal mode]]: the Turbo Pascal and Object Pascal keywords are available for you to use | * [[Mode ObjFPC | Extended Free Pascal mode]]: the Turbo Pascal and Object Pascal keywords are available for you to use | ||
− | Note | + | {{Note|The terms keywords and reserved words are used interchangeably here ''is this correct?'' <br/> |
− | ''To do'': insert explanation/link to the online Free Pascal manual of what a keyword/reserved word is: e.g. can you name your variables "if" etc. | + | ''To do'': insert explanation/link to the online Free Pascal manual of what a keyword/reserved word is: e.g. can you name your variables "if" etc.<br/> |
− | ''To do'': create pages for the keywords if they don't exist yet (e.g. translate from the German version) and link to the online Free Pascal manual section on that keyword in those pages. | + | ''To do'': create pages for the keywords if they don't exist yet (e.g. translate from the German version) and link to the online Free Pascal manual section on that keyword in those pages.}} |
==Reserved words in Turbo Pascal== | ==Reserved words in Turbo Pascal== | ||
+ | |||
The following keywords occur in Turbo Pascal mode: | The following keywords occur in Turbo Pascal mode: | ||
+ | |||
{| class = "wikitable" | {| class = "wikitable" | ||
|- | |- | ||
− | ! | + | ! Keyword !! Description |
|- | |- | ||
| [[And|and]] || Boolean operator requiring both conditions are true for the result to be true | | [[And|and]] || Boolean operator requiring both conditions are true for the result to be true | ||
Line 50: | Line 53: | ||
| [[End|end]] || end of a block of code, a record or certain other constructs] | | [[End|end]] || end of a block of code, a record or certain other constructs] | ||
|- | |- | ||
− | | [[False|false]] || boolean value indicating a test failed; opposite of [[True|true]]. As of FPC 3.0.0. False is no longer a keyword. | + | | [[False|false]] || boolean value indicating a test failed; opposite of [[True|true]]. '''As of FPC 3.0.0. False is no longer a keyword'''. |
|- | |- | ||
| [[File|file]] || external data structure, typically stored on disc | | [[File|file]] || external data structure, typically stored on disc | ||
Line 66: | Line 69: | ||
| [[In|in]] || identifies elements in a collection | | [[In|in]] || identifies elements in a collection | ||
|- | |- | ||
− | | [[ | + | | [[Inline|inline]] || machine code inserted directly into a routine |
|- | |- | ||
| [[Interface|interface]] || public declarations of routines in a [[Unit|unit]] | | [[Interface|interface]] || public declarations of routines in a [[Unit|unit]] | ||
Line 82: | Line 85: | ||
| [[Of|of]] || defines the characteristics of a variable | | [[Of|of]] || defines the characteristics of a variable | ||
|- | |- | ||
− | | [[On|on]] || | + | | [[On|on]] || defines an exception handling statement in the [[Except]] part of a [[Try]] statement |
|- | |- | ||
| [[Operator|operator]] || defines a routine used to implement an operator | | [[Operator|operator]] || defines a routine used to implement an operator | ||
Line 110: | Line 113: | ||
| [[To|to]] || indicates a [[For|for]] variable is to be incremented | | [[To|to]] || indicates a [[For|for]] variable is to be incremented | ||
|- | |- | ||
− | | [[True|true]] || boolean value indicating a test succeeded; opposite of [[ | + | | [[True|true]] || boolean value indicating a test succeeded; opposite of [[False]]. '''As of FPC 3.0.0. True is no longer a keyword'''. |
|- | |- | ||
| [[Type|type]] || declares kinds of records or new classes of variables | | [[Type|type]] || declares kinds of records or new classes of variables | ||
Line 130: | Line 133: | ||
==Reserved words in Object Pascal== | ==Reserved words in Object Pascal== | ||
− | Object Pascal extends the (Turbo) Pascal language with both support for dealing more easily with objects (object orientation) as well as other newer/more advanced concepts (threads, etc). | + | |
− | In addition to the reserved words in Turbo Pascal, the following reserved words are available in Delphi mode as well: | + | Object Pascal extends the (Turbo) Pascal language with both support for dealing more easily with objects (object orientation) as well as other newer/more advanced concepts (threads, etc). |
+ | |||
+ | In addition to the reserved words in Turbo Pascal, the following reserved words are available in Delphi mode as well: | ||
+ | |||
{| class="wikitable" | {| class="wikitable" | ||
+ | |- | ||
+ | ! Keyword !! Description | ||
|- | |- | ||
| [[As|as]] || | | [[As|as]] || | ||
Line 144: | Line 152: | ||
| [[Exit|exit]] || | | [[Exit|exit]] || | ||
|- | |- | ||
− | | [[Exports|exports]] || | + | | [[Exports|exports]] || exports symbols which will be publicly available |
|- | |- | ||
| [[Finalization|finalization]] || introduces an optional 'finalization' part of a unit. | | [[Finalization|finalization]] || introduces an optional 'finalization' part of a unit. | ||
Line 154: | Line 162: | ||
| [[Initialization|initialization]] || introduces an optional 'initialization' part of a unit. | | [[Initialization|initialization]] || introduces an optional 'initialization' part of a unit. | ||
|- | |- | ||
− | | [[Is|is]] || | + | | [[Is|is]] || can be used as an [[Operator|operator]] or a [[modifier]] |
|- | |- | ||
− | | [[Library|library]] || | + | | [[Library|library]] || used in a shared library unit instead of the reserved word [[Unit|unit]] |
|- | |- | ||
| [[New|new]] || | | [[New|new]] || | ||
Line 176: | Line 184: | ||
==Reserved words in Extended Free Pascal== | ==Reserved words in Extended Free Pascal== | ||
+ | |||
The reserved words in [[Mode ObjFPC|Extended Free Pascal mode]] include: | The reserved words in [[Mode ObjFPC|Extended Free Pascal mode]] include: | ||
+ | |||
* [[Mode TP|Turbo Pascal mode]] reserved words | * [[Mode TP|Turbo Pascal mode]] reserved words | ||
* [[Mode Delphi|Object Pascal mode]] reserved words<br> | * [[Mode Delphi|Object Pascal mode]] reserved words<br> | ||
==Modifiers (directives)== | ==Modifiers (directives)== | ||
− | + | ||
− | Modifiers are not strictly reserved words; however they are used in the same way as reserved words. | + | Modifiers are not strictly reserved words; however they are used in the same way as reserved words. |
− | See the Free Pascal | + | |
+ | See the [https://www.freepascal.org/docs-html/current/ref/ref.html Free Pascal Reference Guide] for details. | ||
+ | |||
{| class="wikitable" | {| class="wikitable" | ||
+ | |- | ||
+ | ! Modifiers !! Description | ||
|- | |- | ||
| [[Absolute|absolute]] || | | [[Absolute|absolute]] || | ||
|- | |- | ||
− | | [[abstract]] || an | + | | [[abstract]] || an abstract class cannot be instantiated, only inherited |
|- | |- | ||
| [[alias]] || | | [[alias]] || | ||
|- | |- | ||
− | | [[assembler]] || assembler...end creates an | + | | [[assembler]] || assembler...end creates an assembly language block |
|- | |- | ||
− | | [[cdecl]] || C declaration | + | | [[cdecl]] || C declaration modifier |
|- | |- | ||
− | | [[cppdecl]] || C++ declaration | + | | [[cppdecl]] || C++ declaration modifier |
|- | |- | ||
| [[default]] || For indexed properties to use them without specifying the property name | | [[default]] || For indexed properties to use them without specifying the property name | ||
Line 204: | Line 218: | ||
| [[external]] || | | [[external]] || | ||
|- | |- | ||
− | | [[forward]] || | + | | [[Forward|forward]] || Allow a subroutine to be used before it is declared |
|- | |- | ||
− | | [[generic]] || class creation | + | | [[generic]] || class creation modifier |
|- | |- | ||
| [[index]] || | | [[index]] || | ||
|- | |- | ||
− | | [[local]] || | + | | [[Local|local]] || A function/procedure modifier only usable with Linux (for Kylix compatibility) |
|- | |- | ||
| [[name]] || | | [[name]] || | ||
Line 216: | Line 230: | ||
| [[nostackframe]] || | | [[nostackframe]] || | ||
|- | |- | ||
− | | [[oldfpccall]] || | + | | [[oldfpccall]] || ''deprecated'' subroutine calling convention |
|- | |- | ||
− | | [[override]] || | + | | [[Override|override]] || overriding of virtual functions |
|- | |- | ||
| [[pascal]] || | | [[pascal]] || | ||
|- | |- | ||
− | | [[private]] || private accessibility modifier, only class members can access data/functions/procedures | + | | [[Private|private]] || private accessibility modifier, only class members can access data/functions/procedures |
|- | |- | ||
− | | [[protected]] || protected accessibility modifier, accessibility modifier, class members and inherited classes can access data/functions/procedures | + | | [[Protected|protected]] || protected accessibility modifier, accessibility modifier, class members and inherited classes can access data/functions/procedures |
|- | |- | ||
| [[public]] || public accessibility modifier, public access to data/functions/procedures | | [[public]] || public accessibility modifier, public access to data/functions/procedures | ||
Line 246: | Line 260: | ||
| [[virtual]] || | | [[virtual]] || | ||
|- | |- | ||
− | | [[write]] || property | + | | [[write]] || property write access |
|- | |- | ||
|} | |} | ||
==Unsupported Turbo Pascal modifiers== | ==Unsupported Turbo Pascal modifiers== | ||
+ | |||
+ | {{Note|These modifiers '''are supported''' in the [[DOS]] cross compiler present in the FPC development version}} | ||
+ | |||
The reason why these modifiers are not supported is that these modifiers deal with 16 bit code for DOS. In other words, these modifiers have special meaning for 16 bit programming under DOS and Windows 3.x. | The reason why these modifiers are not supported is that these modifiers deal with 16 bit code for DOS. In other words, these modifiers have special meaning for 16 bit programming under DOS and Windows 3.x. | ||
As Free Pascal does not support 16 bit code (only 32 and 64 bit), these modifiers are irrelevant in Free Pascal code. | As Free Pascal does not support 16 bit code (only 32 and 64 bit), these modifiers are irrelevant in Free Pascal code. | ||
− | |||
− | [[Far|far]] | + | {| class="wikitable" |
− | [[Near|near]] | + | |- |
+ | | [[Far|far]] || access addresses outside of the current 64KB segment | ||
+ | |- | ||
+ | | [[Near|near]] || access addresses in the current 64KB segment | ||
+ | |} | ||
==More functionality== | ==More functionality== | ||
+ | |||
Apart from the language features provided by the reserved words/keywords mentioned above, there is a lot of functionality available for the programmer in the various libraries: | Apart from the language features provided by the reserved words/keywords mentioned above, there is a lot of functionality available for the programmer in the various libraries: | ||
Line 269: | Line 290: | ||
Apart from the libraries provided by FPC and Lazarus, there are more libraries/components available: | Apart from the libraries provided by FPC and Lazarus, there are more libraries/components available: | ||
+ | |||
* FPC user-supplied units: see the FPC wiki | * FPC user-supplied units: see the FPC wiki | ||
* Lazarus CCR: components | * Lazarus CCR: components | ||
* User-supplied code on the internet: see open source repositories like SourceForge and GitHub. | * User-supplied code on the internet: see open source repositories like SourceForge and GitHub. | ||
− | [[ | + | == See also == |
+ | |||
+ | * [[Pascal basics]] |
Revision as of 06:33, 23 February 2020
│
Deutsch (de) │
English (en) │
français (fr) │
polski (pl) │
русский (ru) │
中文(中国大陆) (zh_CN) │
The keywords of the individual compiler modes are summarized as follows:
- Turbo Pascal mode: the Turbo Pascal keywords are available for you to use
- Delphi mode: the Turbo Pascal and Object Pascal keywords are available for you to use
- Extended Free Pascal mode: the Turbo Pascal and Object Pascal keywords are available for you to use
Note: The terms keywords and reserved words are used interchangeably here is this correct?
To do: insert explanation/link to the online Free Pascal manual of what a keyword/reserved word is: e.g. can you name your variables "if" etc.
Reserved words in Turbo Pascal
The following keywords occur in Turbo Pascal mode:
Keyword | Description |
---|---|
and | Boolean operator requiring both conditions are true for the result to be true |
array | multiple elements with the same name |
asm | start of code written in assembly language |
begin | start of a block of code |
break | exit a case statemenr |
case | select a particular segement of code to execute based on a value |
const | declare an identifier with a fixed value, or a variable with an initialized value |
constructor | routine used to create an object |
continue | skips an iteration in a for-loop and restart execution at the beginning of the loop |
destructor | routine used to deallocate an object |
div | integer divide operator |
do | used to indicate start of a loop |
downto | used in a for loop to indicate the index variable is decremented |
else | used in if statement to provide an execution path when the if test fails |
end | end of a block of code, a record or certain other constructs] |
false | boolean value indicating a test failed; opposite of true. As of FPC 3.0.0. False is no longer a keyword. |
file | external data structure, typically stored on disc |
for | loop used to increment or decrement a control variable |
function | define start of a routine that returns a result value |
goto | used to exit a segment of code and jump to another point |
if | test a condition and perform a set of instructions based on the result |
implementation | define the internal routines in unit |
in | identifies elements in a collection |
inline | machine code inserted directly into a routine |
interface | public declarations of routines in a unit |
label | defines the target jump point for a goto |
mod | operator used to return the remainder of an integer division |
nil | pointer value indicating the pointer does not contain a value |
not | boolean operator that negates the result of a test |
object | defines an object construct |
of | defines the characteristics of a variable |
on | defines an exception handling statement in the Except part of a Try statement |
operator | defines a routine used to implement an operator |
or | boolean operator which allows either of two choices to be used |
packed | indicates the elements of an array are to use less space (this keyword is primarily for compatibility with older programs as packing of array elements is generally automatic) |
procedure | define start of a routine that does not return a result value |
program | defines start of an application. This keyword is usually optional. |
record | group a series of variables under a single name |
repeat | loop through a section of code through an until statement as long as the result of the test is true |
set | group a collection |
shl | operator to shift a value to the left; equivalent to multiplying by a power of 2 |
shr | operator to shift a value to the right; equivalent to dividing by a power of 2 |
string | declares a variable that contains multiple characters |
then | indicates start of code in an if test |
to | indicates a for variable is to be incremented |
true | boolean value indicating a test succeeded; opposite of False. As of FPC 3.0.0. True is no longer a keyword. |
type | declares kinds of records or new classes of variables |
unit | separately compiled module |
until | indicates end test of a repeat statement |
uses | names units this program or unit refers to |
var | declare variables |
while | test a value and if true, loop through a section of code |
with | reference the internal variables within a record without having to refer to the record itself |
xor | boolean operator used to invert an or test |
Reserved words in Object Pascal
Object Pascal extends the (Turbo) Pascal language with both support for dealing more easily with objects (object orientation) as well as other newer/more advanced concepts (threads, etc).
In addition to the reserved words in Turbo Pascal, the following reserved words are available in Delphi mode as well:
Keyword | Description |
---|---|
as | |
class | |
dispose | |
except | |
exit | |
exports | exports symbols which will be publicly available |
finalization | introduces an optional 'finalization' part of a unit. |
finally | part of a try - finally - end block |
inherited | calls functionb/procedure from ancestor class |
initialization | introduces an optional 'initialization' part of a unit. |
is | can be used as an operator or a modifier |
library | used in a shared library unit instead of the reserved word unit |
new | |
on | |
out | |
property | |
raise | |
self | |
threadvar | |
try |
Reserved words in Extended Free Pascal
The reserved words in Extended Free Pascal mode include:
- Turbo Pascal mode reserved words
- Object Pascal mode reserved words
Modifiers (directives)
Modifiers are not strictly reserved words; however they are used in the same way as reserved words.
See the Free Pascal Reference Guide for details.
Modifiers | Description |
---|---|
absolute | |
abstract | an abstract class cannot be instantiated, only inherited |
alias | |
assembler | assembler...end creates an assembly language block |
cdecl | C declaration modifier |
cppdecl | C++ declaration modifier |
default | For indexed properties to use them without specifying the property name |
export | |
external | |
forward | Allow a subroutine to be used before it is declared |
generic | class creation modifier |
index | |
local | A function/procedure modifier only usable with Linux (for Kylix compatibility) |
name | |
nostackframe | |
oldfpccall | deprecated subroutine calling convention |
override | overriding of virtual functions |
pascal | |
private | private accessibility modifier, only class members can access data/functions/procedures |
protected | protected accessibility modifier, accessibility modifier, class members and inherited classes can access data/functions/procedures |
public | public accessibility modifier, public access to data/functions/procedures |
published | accessibility modifier, published properties are visible in IDE ar can be written to .lfm |
read | property read access |
register | |
reintroduce | |
safecall | |
softfloat | |
specialize | specialization of generic classes |
stdcall | |
virtual | |
write | property write access |
Unsupported Turbo Pascal modifiers
The reason why these modifiers are not supported is that these modifiers deal with 16 bit code for DOS. In other words, these modifiers have special meaning for 16 bit programming under DOS and Windows 3.x.
As Free Pascal does not support 16 bit code (only 32 and 64 bit), these modifiers are irrelevant in Free Pascal code.
far | access addresses outside of the current 64KB segment |
near | access addresses in the current 64KB segment |
More functionality
Apart from the language features provided by the reserved words/keywords mentioned above, there is a lot of functionality available for the programmer in the various libraries:
- RTL: Run-Time Library, available for all FPC and Lazarus programs
- FCL: Free Component Library: a core set of libraries available for Lazarus programs and usually for FPC (FPC can be compiled without it, but that only happens on purpose for low-memory embedded systems etc)
- FPC Packages: other packages provided by FPC
- Lazarus components: these are Lazarus components that can be dropped on a form and often based on FCL or FPC packages
- Lazarus utility functions: e.g. the fileutil unit.
Apart from the libraries provided by FPC and Lazarus, there are more libraries/components available:
- FPC user-supplied units: see the FPC wiki
- Lazarus CCR: components
- User-supplied code on the internet: see open source repositories like SourceForge and GitHub.