Component Pascal

Component Pascal は、ニクラウス・ヴィルトによるlang|fr|Pascal、lang|en|Modula-2、lang|en|Oberon、lang|en|Oberon-2 の伝統をひくプログラミング言語である。

**概要**
の名を持つが、Pascal 互換ではない。むしろ Oberon-2 から派生した改良版であり、チューリッヒ工科大学から分離独立したオベロン・マイクスシステムズという小さな会社によって設計、保守されている。彼らのIDE（統合開発環境）は、lang|en|BlackBox Component Builder と呼ばれる。
1994年に最初のバージョンが Oberon/F としてリリースされたとき、フィールドとコマンドボタンを、エクスポートされた変数とプロシージャに結び付けた、編集可能なフォームを用いたグラフィカルユーザインターフェイスへの新しいアプローチを提案した。
オーストラリアのクイーンズランド工科大学のジョン・ゴーを中心としたガーデンズ・ポイント・チームによる lang|en|.NETと Java仮想マシン|Java仮想マシン のためのオープンソース実装が存在する。
2004年6月23日、オベロン・マイクスシステムズは BlackBox Component Builder が無料ダウンロード可能になったことと、オープンソース版が計画されていることを発表した。最初に2004年12月にベータ版がリリースされ、2005年12月に最終V1.5にアップデートされた。IDE、コンパイラ、デバッガ、ソースアナライザ、プロファイラ、インターフェイスライブラリの完全なソースが含まれ、彼らのウェブサイトからダウンロードも可能である。
Pascal は、例えばソースファイルのようなドキュメントファイルに拡張子 .odc を用い、シンボルファイルに .osf を用いる。一方、Gardens Point Component Pascal はソースに .cp、シンボルファイルに .cps を用いる。BlackBox Component Pascal は、専用の実行オブジェクトフォーマットとして .ocf を持ち、このフォーマットのための実行時リンクローダを含む。

**文法**
Pascal の完全な文法は以下の通りである。Oberon-2 よりもかなり先進的な言語であるにもかかわらず、それよりひとつ多いだけの、たった34のEBNF生成規則しか必要としない。
Module = MODULE ident ";" ImportList DeclSeq BEGIN StatementSeq CLOSE StatementSeq END ident ".".
ImportList = IMPORT ident ":=" ident {"," ident ":=" ident} ";".
DeclSeq = { CONST {ConstDecl ";" } | TYPE {TypeDecl ";"} | VAR {VarDecl ";"}} {ProcDecl ";" | ForwardDecl ";"}.
ConstDecl = IdentDef "=" ConstExpr.
TypeDecl = IdentDef "=" Type.
VarDecl = IdentList ":" Type.
ProcDecl = PROCEDURE Receiver IdentDef FormalPars MethAttributes ";" DeclSeq BEGIN StatementSeq END ident.
MethAttributes = "," NEW  EXTENSIBLE).
ForwardDecl = PROCEDURE " ^ " Receiver IdentDef FormalPars MethAttributes.
FormalPars = "(" FPSection {";" FPSection} ")" ":" Type.
FPSection =  OUT ident {"," ident} ":" Type.
Receiver = "("  IN ident ":" ident ")".
Type = Qualident

ARRAY ConstExpr {"," ConstExpr} OF Type

LIMITED RECORD "("Qualident")" FieldList {";" FieldList} END

POINTER TO Type

PROCEDURE FormalPars.
FieldList = IdentList ":" Type.
StatementSeq = Statement {";" Statement}.
Statement =  Designator ":=" Expr

Designator "(" ExprList ")"

IF Expr THEN StatementSeq
{ELSIF Expr THEN StatementSeq}
ELSE StatementSeq END

" Case}
ELSE StatementSeq END

WHILE Expr DO StatementSeq END

REPEAT StatementSeq UNTIL Expr

FOR ident ":=" Expr TO Expr BY ConstExpr DO StatementSeq END

LOOP StatementSeq END

WITH  Guard DO StatementSeq  {"|"  Guard DO StatementSeq  } ELSE StatementSeq END

EXIT

RETURN Expr
.
Case = CaseLabels {"," CaseLabels} ":" StatementSeq.
CaseLabels = ConstExpr ".." ConstExpr.
Guard = Qualident ":" Qualident.
ConstExpr = Expr.
Expr = SimpleExpr Relation SimpleExpr.
SimpleExpr =  "-" Term {AddOp Term}.
Term = Factor {MulOp Factor}.
Factor = Designator | number | character | string | NIL | Set | "(" Expr ")" | " ~ " Factor.
Set = "{" Element {"," Element} "}".
Element = Expr ".." Expr.
Relation = "=" | "#" | "" | ">=" | IN | IS.
AddOp = "+" | "-" | OR.
MulOp = " * " | "/" | DIV | MOD | "&".
Designator = Qualident {"." ident | "" ExprList "" | " ^ " | "(" Qualident ")" | "(" ExprList ")"}  "$" .
ExprList = Expr {"," Expr}.
IdentList = IdentDef {"," IdentDef}.
Qualident = ident "." ident.
IdentDef = ident  "-".

**外部リンク**
 Oberon microsystems- Open Source License for the framework- Gardens Point Component Pascal- Component Pascal Collection with many useful sources- Component Pascal Resources- Open Directory: Component Pascal

**Oberon と Oberon-2 の進化**
「 From Modula-2 to Oberon」、ヴィルト、1988年
*「 The Programming Language Oberon」、ヴィルト、1988年
*「 Differences between Oberon and Oberon-2」、メッセンベック、ヴィルト、1991年
*「 The Programming Language Oberon-2」メッセンベック、ヴィルト、計算機システム学科、チューリッヒ工科大学、1992年1月
*「 What's New in Component Pascal」、プファイシュテル、2001年