改めて Object Pascal の文法

 多分、Delphi.NET の関係でしょうが、2005 以降 "Object Pascal (Delphi 言語) の文法" はヘルプに載っていません。そこで、多少使い勝手のいい HTML 版 "Object Pascal の文法" を作ってみました。文法の定義 (斜体になっている箇所) にはリンクが張ってありますので、クリックして芋づる式に辿る事ができます。

 ベースになっているのは Delphi 7 の文法です (多少追加してありますが) ...なので "Delphi 言語 の文法" ではなく、あえて "Object Pascal の文法" としています。オリジナルは "Delphi 7 - Object Pascal 言語ガイド - 付録A Object Pascal の文法" です。


Object Pascal の文法


ゴール

->

(プログラム | パッケージ | ライブラリ | ユニット)

プログラム

->

[PROGRAM 識別子 ['(' 識別子リスト ')'] ';']
プログラムブロック '.'

ユニット

->

UNIT 識別子 [移植性指令] ';'
インターフェース部
実現部
初期化部 '.'

パッケージ

->

PACKAGE 識別子 ';'
[requires 節]
[contains 節]
END '.'

ライブラリ

->

LIBRARY 識別子 ';'
プログラムブロック '.'

プログラムブロック

->

[uses]
ブロック

移植性指令

->
->
->

platform
deprecated
library

uses 節

->

USES 識別子リスト ';'

インターフェース部

->

INTERFACE
[uses]
[インターフェース宣言]...

インターフェース宣言

->
->
->
->

定数宣言部
型宣言部
変数宣言部
エクスポートヘッダー

エクスポートヘッダー

->
->

手続きヘッダー ';' [指令]
関数ヘッダー ';' [指令]

実現部

->

IMPLEMENTATION
[uses]
[宣言部]
[Exports 文]...

ブロック

->

[宣言部]
[Exports 文]...
複合文
[Exports 文]...

Exports 文

->

EXPORTS Exports 項目 [, Exports 項目]...

Exports 項目

->
->

識別子 [NAME | INDEX "'" 定数式 "'"]
[NAME | INDEX "'" 定数式 "'"]

宣言部

->
->
->
->
->

ラベル宣言部
定数宣言部
型宣言部
変数宣言部
手続き宣言部

ラベル宣言部

->

LABEL ラベル識別子

定数宣言部

->

CONST (定数宣言 ';')...

定数宣言

->
->

識別子 '=' 定数式 [移植性指令]
識別子 ':' 型識別子 '=' 型付き定数 [移植性指令]

型宣言部

->

TYPE (型宣言 ';')...

型宣言

->
->
->
->

識別子 [TYPE] '='  [移植性指令]
識別子 [TYPE] '=' 限定型 [移植性指令]
識別子 '=' クラスヘルパー
識別子 '=' オーバーロード演算子

型付き定数

->

(定数式 | 配列定数 | レコード定数)

配列定数

->

'(' 型付き定数 ','... ')'

レコード定数

->

'(' レコードフィールド定数 ';'... ')'

レコードフィールド定数

->

識別子 ':' 型付き定数


->
->
->
->
->
->
->
->

型識別子
単純型
構造化型
ポインタ型
文字列型
手続き型
バリアント型
クラス参照型

限定型

->
->
->
->

オブジェクト型
クラス型
インターフェース型

クラス参照型

->

CLASS OF 型識別子

単純型

->

(順序型 | 実数型)

実数型

->
->
->
->
->
->
->

REAL48
REAL
SINGLE
DOUBLE
EXTENDED
CURRENCY
COMP

順序型

->

(部分範囲型 | 列挙型 | 順序型識別子)

順序型識別子

->
->
->
->
->
->
->
->
->
->
->
->
->
->
->
->
->
->
->

SHORTINT
SMALLINT
INTEGER
LONGINT
INT64
BYTE
WORD
LONGWORD
UINT64 
BOOLEAN
BYTEBOOL
WORDBOOL
LONGBOOL 
CHAR
ANSICHAR
WIDECHAR
PCHAR
PANSICHAR
PWIDECHAR

バリアント型

->
->

VARIANT
OLEVARIANT

部分範囲型

->

定数式 '..' 定数式

列挙型

->

'(' 列挙型要素 ','... ')'

列挙型要素

->

識別子 ['=' 定数式 ]

文字列型

->
->
->
->
->

STRING
ANSISTRING
UNICODESTRING
WIDESTRING
SHORTSTRING '[' 定数式 ']'

構造化型

->

[PACKED] (配列型 [PACKED] | 集合型 | ファイル型 | レコード型 [PACKED])

配列型

->

ARRAY ['[' 順序型 ','...']'] OF  [移植性指令]

レコード型

->

RECORD [フィールドリスト] END [移植性指令]

反復型

->
->
->
->
->
->

配列型
文字列型
集合型
クラス型
インターフェイス型
レコード型

フィールドリスト

->

フィールド宣言 ';'...[レコード可変部] [';']

フィールド宣言

->

識別子リスト ':'  [移植性指令]

レコード可変部

->

CASE [識別子 ':'] 型識別子 OF 可変部 ';'...

可変部

->

定数式 ','...':' '(' [フィールドリスト] ')'

集合型

->

SET OF 順序型 [移植性指令]

ファイル型

->

FILE OF 型識別子 [移植性指令]

ポインタ型

->

'^' 型識別子 [移植性指令]

手続き型

->

(手続きヘッダー | 関数ヘッダー) [OF OBJECT]

変数宣言部

->

VAR (変数宣言 ';')...

変数宣言

->

識別子リスト ':'  [(ABSOLUTE (識別子 | 定数式)) | '=' 定数式) [移植性指令]


->

単純式 [関係演算子 単純式]...

単純式

->

['+' | '-']  [加減演算子 ]...


->

要素 [乗除演算子 要素]...

要素

->
->
->
->
->
->
->
->
->

指定子 ['(' 式リスト ')']
'@' 指定子

文字列
NIL
'('  ')'
NOT 要素
集合構成子
型識別子 '('  ')'

関係演算子

->
->
->
->
->
->
->
->

'>'
'<'
'<='
'>='
'<>'
IN
IS
AS

加減演算子

->
->
->
->

'+'
'-'
OR
XOR

指定子

->

限定識別子 ['.' 識別子 | '[' 式リスト ']' | '^']...

集合構成子

->

'[' [集合要素 ','...] ']'

集合要素

->

 ['..' ]

式リスト

->

 ','...


->

[ラベル識別子 ':'] [単純文 | 構造化文]

文リスト

->

 ';'...

単純文

->
->
->
->

指定子 ['(' [式リスト] ')']
指定子 ':=' 
INHERITED
GOTO ラベル識別子

構造化文

->
->
->
->
->
->
->
->

複合文
条件文
ループ文
with 
Try..Except 
Try..Finally 
Raise 
アセンブラ文

複合文

->

BEGIN
  文リスト
END

条件文

->
->

if
case

if 文

->

IF  THEN
  
[ELSE
  ]

case 文

->

CASE  OF
  ケースセレクタ ';'
  ...
[ELSE
  文リスト] [';']
END

ケースセレクタ

->

ケースラベル ','...':' 

ケースラベル

->

定数式 ['..' 定数式]

ループ文

->
->
->

repeat 
while 
for 

repeat 文

->

REPEAT
  
UNTIL 

while 文

->

WHILE  DO
  

for 文

->
->

FOR 限定識別子 ':='  (TO | DOWNTO)  DO
  
FOR 限定識別子 IN 反復型 DO
  

with 文

->

WITH 識別子リスト DO
  

Try..Except 文

->

TRY
  ...
EXCEPT
  例外ブロック
END

例外ブロック

->

[ON [識別子 ':’] 型識別子 DO
  ]
...
[ELSE
  ...]

Try..Finally 文

->

TRY
  
FINALLY
  
END

Raise 文

->

RAISE [<オブジェクト>] [AT <アドレス>]

アセンブラ文

->

ASM
  <アセンブリ言語>
END

手続き宣言部

->
->

手続き宣言
関数宣言

手続き宣言

->

手続きヘッダー ';' [指令] [移植性指令]
ブロック ';'

関数宣言

->

関数ヘッダー ';' [指令] [移植性指令]
ブロック ';'

関数ヘッダー

->

FUNCTION 識別子 [仮パラメータリスト] ':' (単純型 | 文字列型)

手続きヘッダー

->

PROCEDURE 識別子 [仮パラメータリスト]

仮パラメータリスト

->

'(' 仮パラメータ ';'... ')'

仮パラメータ

->

[VAR | CONST | OUT] パラメータ

パラメータ

->
->

識別子リスト [':' ([ARRAY OF] 単純型 | 文字列型 | FILE)]
識別子 ':' 単純型 '=' 定数式

指令

->
->
->
->
->
->
->
->
->
->
->
->
->
->
->
->
->
->
->

CDECL
REGISTER
DYNAMIC
VIRTUAL
EXPORT
EXTERNAL
NEAR
FAR
FORWARD
MESSAGE 定数式
OVERRIDE
OVERLOAD
PASCAL
REINTRODUCE
SAFECALL
STDCALL
VARARGS
LOCAL
ABSTRACT

オブジェクト型

->

OBJECT [オブジェクト継承]
  [オブジェクトフィールドリスト]
  [メソッドリスト]
END

オブジェクト継承

->

'(' 限定識別子 ')'

メソッドリスト

->

(メソッドヘッダー [';' VIRTUAL]) ';'...

メソッドヘッダー

->
->
->
->

手続きヘッダー
関数ヘッダー
コンストラクタヘッダー
デストラクタヘッダー

コンストラクタヘッダー

->

CONSTRUCTOR 識別子 [仮パラメータリスト]

デストラクタヘッダー

->

DESTRUCTOR 識別子 [仮パラメータリスト]

オブジェクトフィールドリスト

->

(識別子リスト ':' ) ';'...

初期化部

->



->

->

INITIALIZATION
  文リスト 
[FINALIZATION
  文リスト]
END
BEGIN
  文リスト
END
END

クラス型

->

CLASS ['[' (ABSTRACT | SEALED) ']'] [クラス継承]
  [クラスメンバーリスト]
END

クラスヘルパー

->

CLASS HELPER [クラス継承] FOR 識別子 
  [クラスメンバーリスト]
END

オーバーロード演算子

->

(CLASS | RECORD)
  クラスオペレータ
END

クラスメンバーリスト

->
->
->
->

クラス可視性
クラスフィールドリスト
クラスメソッドリスト
クラスプロパティリスト

クラス継承

->

'(' 識別子リスト ')'

クラス可視性

->

[PUBLIC | (STRICT) PROTECTED | (STRICT) PRIVATE | PUBLISHED]

クラスフィールドリスト

->

(クラス可視性 オブジェクトフィールドリスト) ';'...

クラスメソッドリスト

->

(クラス可視性 メソッドリスト) ';'...

クラスプロパティリスト

->

(クラス可視性 プロパティリスト ';')...

プロパティリスト

->

PROPERTY 識別子 [プロパティインターフェース] [プロパティ指定子] [移植性指令]

プロパティインターフェース

->

[プロパティパラメータリスト] ':' 識別子

プロパティパラメータリスト

->

'[' (識別子リスト ':' 型識別子) ';'... ']'

プロパティ指定子

->

[INDEX 定数式]
[READ 識別子]
[WRITE 識別子]
[STORED (識別子 | 定数)]
[(DEFAULT 定数式) | NODEFAULT]
[IMPLEMENTS 型識別子]

インターフェース型

->

INTERFACE [インターフェース継承]
  [クラスメソッドリスト]
  [クラスプロパティリスト]
  ...
END

インターフェース継承

->

'(' 識別子リスト ')'

requires 節

->

REQUIRES 識別子リスト... ';'

contains 節

->

CONTAINS 識別子リスト... ';'

識別子リスト

->

識別子 ','...

限定識別子

->

[ユニット識別子 '.'] 識別子

型識別子

->

[ユニット識別子 '.'] <型識別子>

識別子

->

<識別子>

定数式

->

<定数式>

ユニット識別子

->

<ユニット識別子>

ラベル識別子

->

<ラベル識別子>


->

<数>

文字列

->

<文字列>

Delphi 2005 以降の言語拡張

Delphi 2005

Delphi 2006

Delphi 2007

Delphi 2009

Delphi 2010

Delphi XE

 繰り返しになりますが、現時点では完全な "Delphi 言語の文法" というのは存在しません。あるのは "Object Pascal の文法""断片的な変更点の差分" であり、その差分の文法もすべて揃っている訳ではない (過去のバージョンのヘルプにしか文法が載っていないものもある) ので、ミックスしても完全にリンクさせる事ができません。

 また、この構文に載っていないものもありますので、以下に参照先へのリンクを張っておきます。

See Also:


 BACK