0. はじめに
0.1. Pascal プログラムの概要
・uses 句の由来
Delphi にはソース分割のための uses 句があるため、
この拡張は Ada の機能を参考に UCSD Pascal が導入したようです。
・節入れ替えの由来
Delphi では実行部以外なら節を入れ替えても大丈夫ですし、
この拡張は Apple LISA Pascal 由来のようですが、他の Pascal にも類似の拡張があるようです。
See also
- UCSD Pascal を触るためだけの UCSD p-System 操作ガイド (Qiita)
- <2> Clascal のオブジェクト指向拡張 (Pascal へのオブジェクト指向拡張の歴史と Delphi) (Qiita)
(0.1.1.) unit と uses
・宣言部 (interface) と実現部 (implementation)
C 言語で言う所のヘッダファイル (*.h) が宣言部、ソースファイル (*.c) が実現部に相当します。
・finalization
終了処理部 finalization は Delphi 2 で導入されました。Delphi 1 には同等の処理を行うための ExitProc()
と AddExitProc()
がありました。
・to begin do / to end do (拡張 Pascal)
拡張 Pascal には initialization / finalization 同様の構造として、to begin do / to end do があります。
unit ユニット識別子;
// 宣言部
interface
{ 宣言部のコード }
// 実現部
implementation
{ 実現部のコード }
// 初期化文 (オプション)
to begin do
begin
{ 初期化のコード }
end;
// 終了処理文 (オプション)
to end do
begin
{ 終了処理のコード }
end;
end.
共に文として定義されているようです。
ユニット初期化文 =
to begin do 文 ";".
ユニット終了処理文 =
to end do 文 ";".
・暗黙の uses
uses には暗黙的に System
ユニットと SysInit
ユニットが含まれています。
Modula-2 にも疑似モジュール SYSTEM
がありました。
・in を伴う uses
プロジェクトファイル (*.dpr) の uses 句には in 指令を伴ってユニットが記述されている事があります。
program Project1;
uses
Vcl.Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
これは ユニット (Unit1
) がプロジェクト (Project1
) に含まれる事を意味し、ソースファイル (Unit1.pas
) は IDE の管理下に置かれる事になります。
(0.1.1.1.) Propagated Uses (Uses Propagation / Unit Propagation)
・Propagated Uses
Mac 系の Pascal には Propagated Uses または Uses Propagation と呼ばれる機能があり、これをオンにするとユニットオブジェクトのスコープが拡張され、間接的に uses されたユニットのルーチン等を使用できるようになります。
unit unitA;
uses
unitB;
...
function FuncA: Integer;
unit unitB;
uses
unitC;
function FuncB: Integer;
...
unit unitC;
function FuncC: Integer;
...
unitA のスコープでは、自身で定義されている FuncA()
と unitB の FuncB()
が使えますが、間接的に uses されている unitC の FuncC()
も使えるのが Propagated Uses です。
・Symantec THINK Pascal の Propagated Uses
[コンパイラオプション] で "USES Extensions" にチェックを入れると Propagated Uses が有効になります 1 2。
・Metroweaks CodeWarrior Pascal の Uses Propagation
[Pascal Language 設定パネル] で "Uses Propagation" にチェックを入れるか、プラグマ $pragma usespropagation on
で Uses Propagation が有効になります。
See also
- MACPAS mode (freepascal.org)
- 5.1 GPC options besides those of GCC. (gnu-pascal.org)
- <3> Macintosh 用 Pascal のオブジェクト指向拡張 (Pascal へのオブジェクト指向拡張の歴史と Delphi) (Qiita)
(0.1.2.) インクルードファイル
インクルードファイルの当初の目的はメモリ不足でエディタに収まらないソースファイルを分割して編集するためでした。
分割コンパイルのための仕組みではないので、コンパイル時に毎回読み込まれます。
(0.1.3.) パッケージとライブラリ
(0.1.3.1.) パッケージ
(0.1.3.2.) ライブラリ
0.2. 構文図
0.3. 拡張バッカス・ナウア記法 (EBNF)
0.4. 有効範囲 (スコープ)
索引
[ ↑ 目次へ ] [ → 1. 記法: トークンと区切り文字〔裏〕 ]