Edited at

<1> 記法: トークンと区切り文字 (標準 Pascal 範囲内での Delphi 入門)


1. 記法: トークンと区切り文字

Pascal は トークン (記号)区切り文字 (分離子) で構成されます。トークンとは、プログラム内で意味を持つテキストの最小単位です。トークンには次のようなものがあります。


  • 特殊シンボル (特殊記号)

  • 予約語 (綴り記号)

  • 識別子 (名前)

  • 数値 (数)

  • ラベル

  • 指令

区切り文字は空白かコメント (注釈) です。

See also:


1.1. 区切り文字 (分離子)

空白、改行 (行分離子) 及びコメント (注釈) は 区切り文字 (分離子) です。Pascal のトークンの途中に区切り文字が存在するのはトークンが文字列である場合のみです。


コメント (注釈)

標準 Pascal の コメント (注釈){ で始まり } で終わるブロックコメントだけですが、Delphi では // から始まる行コメントも使えます。

{ これはコメントです }

// これはコメントです (Delphi)

Pascal の文法を理解してくると、行コメントは Pascal という言語には異質な存在と思えるようになってきます (多分)。

See also:


1.2. 特殊シンボル (特殊記号) と予約語 (綴り記号)


特殊シンボル (特殊記号)

標準 Pascal の特殊シンボル (特殊記号) は次の通りです。

# ' ( ) * + , - . / : ; < = > [ ] ↑ { }

Delphi の特殊シンボルは次の通りです。

# $ & ' ( ) * + , - . / : ; < = > @ [ ] ^ { }

オリジナルの Pascal が動作したコンピュータ (CDC 6000) には という文字がありました。これは @ または ^ で置き換えることが可能でした。古い Pascal の書籍では ^ の文脈で が出てくるので少々読みにくいです。

特殊シンボルの一部は ダイグラフ(2 文字表記)で表す事ができます。

文字
ダイグラフ

{
(*

}
*)

[
(.

]
.)

つまり、ブロックコメント { }(* *) として書くこともできます。 { }[ ] キーのないコンピュータでもダイグラフを使えば、文字を代替可能というわけです。


予約語 (綴り記号)

標準 Pascal の 予約語 (綴り記号) は次の通りです。

and       end       nil       set    

array file not then
begin for of to
case function or type
const goto packed until
div if procedure var
do in program while
downto label record with
else mod repeat

Delphi (10.3 Rio 時点) の予約語は次の通りです。

and                 except              label               set    

array exports library shl
as file mod shr
asm finalization nil string
begin finally not then
case for object threadvar
class function of to
const goto or try
constructor if packed type
destructor implementation procedure unit
dispinterface in program until
div inherited property uses
do initialization raise var
downto inline record while
else interface repeat with
end is resourcestring xor

at および on という単語も予約語として扱う必要があります。

See also:


1.3. 識別子 (名前)

識別子 (名前) は、定数、変数、フィールド、型、プロパティ、手続き、関数、プログラム、ユニット、ライブラリ、およびパッケージを表します。

標準 Pascal では識別子は英字で始まる英数字の組み合わせです。Delphi の場合、識別子にアンダーバー(_) が使え、Unicode 版 Delphi (Delphi 2009 以降) であればUnicode 文字も使えます。

Delphi の場合、識別子の長さに制限はありませんが、有効なのは最初の 255 文字だけです。標準 Pascal は実装依存ですが、最初の 8 文字しか有効でないものもあるようです 1

Pascal は識別子の大文字と小文字を区別しないため HOGEhogeHoge は同じものとして扱われます。

See also:


1.4. 数値 (数)

整数および実数を表す 数値 (数) は 10 進表示を用います。数値の先頭には符号 (+ または -) を付ける事ができます。

123    -100    +0001

実数は小数点や指数、あるいはその両方を使って記述します。次の記述はいずれも実数です。

-0.1    5e-3    87.35E+8

Delphi の場合、先頭に '$' の付いたものは 16 進値です。例えば $0A は 10 進値で 10 となります。

余談ですが、拡張 Pascal では 基数#数値 という書式で任意の基数 (2~36) による値を表現できます。

13#42 { the answer to the ultimate question of life,

the universe, and everything }


1.5. 文字列

文字列文字列リテラル文字列定数 とも呼ばれるもので、引用符付き文字列として表現されます。引用符付き文字列は文字列をアポストロフィ (or シングルクォーテーション or 単一引用符) で囲み、単一行に記述します。引用符付き文字列内でアポストロフィを表したい場合にはアポストロフィを二つ並べます。

  'a'    ';'    '3'    'begin'    'don''t'


(1.5.1.) 制御文字列

Delphi の場合 #数値 として、文字として表現できない文字を 制御文字 で記述する事ができます。例えば

#13#10

は [CR][LF] の改行コードとなります。制御文字は 16 進表記も可能で、

#$0D#$0A

と記述する事もできます。


(1.5.2.) キャレット記法

Delphi の場合、キャレット記法を使い、ASCII コードの制御文字を表す事ができます。キャレット記法とは ^(キャレット) と英数記号の組み合わせによる記法です。

次の改行コード (制御文字) を含む文字列は

'Hello'#$0D#$0A'world'

次のように書き換える事ができます。

'Hello'^M^J'world'

See also:


1.6. ラベル

標準 Pascal におけるラベルは、文に印を付けるための符号なし整数です。0~9999 の値が使えます。

Delphi におけるラベル識別子または符号なし整数です。符号なし整数として 0~4294967295 の値が使えます。

ラベルは goto 文 で使用します。


1.7. 指令 (Directives)

指令 はソース コード内の特定の位置で区別される単語です。予約語ではないため、同じ名前の識別子を作る事も可能です (もちろん非推奨)。

標準 Pascal の指令は恐らく forward だけだと思います (11.3 節)。

forward

Delphi (10.3 Rio 時点) の指令は次の通りです。

absolute            final               override            safecal

abstract forward package sealed
assembler helper pascal static
automated implements platform stdcall
cdecl index private stored
contains inline protected strict
default library public unsafe
delayed local published varargs
deprecated message read virtual
dispid name readonly winapi
dynamic near reference write
experimental nodefault register writeonly
export operator reintroduce
external out requires
far overload resident

See also:


(1.7.1.) ヒント指令 (Hint directives)

Delphi には以下のヒント指令があり、型宣言、変数宣言、クラス、インターフェイス、構造体の宣言、クラスまたはレコード内のフィールド宣言、手続き、関数、メソッドの宣言、およびユニット宣言に適用できます。

platform           deprecated           library

ヒント指令      
説明

platform
シンボルまたはユニットに対する platform ヒント
指令は、そのシンボルまたはユニットが存在
しない可能性があること、
またはプラットフォームによって実装方法が
かなり異なる可能性があることを示します。

deprecated
deprecated 指令は、使われなくなった項目、
つまり下位互換性のためにのみサポートされて
いる項目を示します。

library
シンボルまたはユニットに対する library ヒント
指令は、コードが存在しない可能性があること、
またはライブラリのアーキテクチャによって
実装方法がかなり異なる可能性があることを
示します。

See also:


索引

[ ← 0. はじめに ] [ ↑ 目次へ ] [ → 2. データの概念: 単純データ型 ]





  1. Apple ][ や /// の Pascal の識別子は 8 文字まで、MPW Pascal が 63 文字まででした。