Component Pascal

** ** は、ニクラウス・ヴィルトによる、、、 の伝統をひくプログラミング言語である。

## 概要
 の名を持つが、 互換ではない。むしろ  から派生した改良版であり、チューリッヒ工科大学から分離独立したオベロン・マイクスシステムズという小さな会社によって設計、保守されている。彼らのIDE（統合開発環境）は、 と呼ばれる。
1994年に最初のバージョンが  としてリリースされたとき、フィールドとコマンドボタンを、エクスポートされた変数とプロシージャに結び付けた、編集可能なフォームを用いたグラフィカルユーザインターフェイスへの新しいアプローチを提案した。

オーストラリアのクイーンズランド工科大学のジョン・ゴーを中心としたガーデンズ・ポイント・チームによる と 仮想マシン のためのオープンソース実装が存在する。

2004年6月23日、オベロン・マイクスシステムズは  が無料ダウンロード可能になったことと、オープンソース版が計画されていることを発表した。最初に2004年12月にベータ版がリリースされ、2005年12月に最終V1.5にアップデートされた。IDE、コンパイラ、デバッガ、ソースアナライザ、プロファイラ、インターフェイスライブラリの完全なソースが含まれ、彼らのウェブサイトからダウンロードも可能である。

  は、例えばソースファイルのようなドキュメントファイルに拡張子 `.odc` を用い、シンボルファイルに `.osf` を用いる。一方、  はソースに `.cp`、シンボルファイルに `.cps` を用いる。  は、専用の実行オブジェクトフォーマットとして `.ocf` を持ち、このフォーマットのための実行時リンクローダを含む。

## 文法
  の完全な文法は以下の通りである。 よりもかなり先進的な言語であるにもかかわらず、それよりひとつ多いだけの、たった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] ["," (ABSTRACT | EMPTY | EXTENSIBLE)].
ForwardDecl = PROCEDURE " ^ " [Receiver] IdentDef [FormalPars] MethAttributes.
FormalPars = "(" [FPSection {";" FPSection}] ")" [":" Type].
FPSection = [VAR | IN | OUT] ident {"," ident} ":" Type.
Receiver = "(" [VAR | IN] ident ":" ident ")".
Type = Qualident
    | ARRAY [ConstExpr {"," ConstExpr}] OF Type
    | [ABSTRACT | EXTENSIBLE | 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 Expr OF Case {"|" 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 [" * " | "-"].
```


## 外部リンク
*
*
* 
*  
*  
* 

### と  の進化
*「[ftp://ftp.inf.ethz.ch/pub/software/Oberon/OberonV4/Docu/ModToOberon.ps.gz ]」、ヴィルト、1988年
*「[ftp://ftp.inf.ethz.ch/pub/software/Oberon/OberonV4/Docu/OberonReport.ps.gz ]」、ヴィルト、1988年
*「[ftp://ftp.inf.ethz.ch/pub/software/Oberon/OberonV4/Docu/Oberon2.Differences.ps.gz ]」、メッセンベック、ヴィルト、1991年
*「」メッセンベック、ヴィルト、計算機システム学科、チューリッヒ工科大学、1992年1月
*「 」、プファイシュテル、2001年