This Project Has Not Released Any Files
プログラムについてのより詳細情報を提供するもう一つの方法は、 形式仕様記述(Formal Specification)です。この文章は 主に仕様を無視していますが、Splintは当初、ソースコートのアノテーションの代わりに LCLの仕様の中の情報を使用するように設計されました。 追加の仕様ファイルを維持するよりもソースコードへアノテーションを追加する方が 労力が少なくないため、このドキュメントはアノテーションに焦点を当てています。 アノテーションはSplintのチェックに関連のあるLCLの仕様の中で表現できる全てのもの を表現することが可能です。 しかし、LCLの仕様はSplintのアノテーションで可能であるよりも プログラムインタフェース上でより正確なドキュメントを提供することが出来ます。 この付録(appendix)([Evans94]から抜き取った)はLCLの仕様へのとても簡単な導入 です。詳細については、[GH93]を参照してください。
言語のラーチファミリー(Larch family)は2段重ねの形式仕様記述に近いです。 仕様は2つの言語を使用して構築されています。—Larch Shared Language (LSL)、 これは実装言語から独立しています。そして、Larch Interface Languageは特定の実装言語向けに設計されています。 LSLの仕様はsorts(ソート)、プログラミング言語の抽象型に類似のもの、 operators(演算子)、プロシージャに類似のものを定義しています。 これは抽象化の根底にある意味を表現しています。
インタフェース言語は特定のプログラミング言語の抽象化へのインタフェースの 仕様を定めます。 抽象化を使用することでクライアント(訳注:使う側のこと)が必要とする インタフェースの詳細を表現し、そして、正しい実装とモジュールの使用の両方に 制約を課します。 インタフェースの文法は、基本型、ソート、そして、LSLの仕様の中で定義された 演算子を使用して記述されています。 インタフェース言語はいくつかのプログラミング言語に対して設計されています。
LCL [GH93, Tan95]は標準C言語向けの ラーチインタフェース言語です。 LCLはC言語のような文法を使用します。 伝統的に、C言語モジュールMはソースファイルM.cと ヘッダーファイルM.hで構成されます。 ヘッダーファイルは、外部公開される関数、あるいは定数を実装するマクロ定義や 外部公開される型の定義と同じように、 Mによって 外部公開される関数、変数、定数のプロトタイプ宣言を含んでいます。 LCLの使用時、モジュールは2つの追加のファイル— M.lcl、Mの形式仕様記述、それから、M.lh、 (lhフラグがオンであれば、)M.lclから Splintによって導出される —を含みます。 クライアントは、 ドキュメントに対し、 M.lclを使用し、 どの実装ファイルも見る必要はありません。 導出されたファイル、M.lhには、 (Mが 他の指定されたモジュールに依存している場合)ディレクティブ、関数プロトタイプ、 それと、M.lclの中で 指定された変数の宣言が含まれます。 ファイルM.hは M.lhを 含むべきであり、古いM.hの 実装面を保持するべきであるが、しかし、クライアントとドキュメントに対して もはや使用はされていません。
これらのフラグはSplintがLCLの仕様で使用されている場合だけ、関係します。
lcs
lh
i <file>
lclexpect <number>
m:-++- imp-checked-spec-globs
m:---- imp-checkmod-spec-globs
m:---+ imp-checkedstrict-spec-globs
P: - spec-glob-imp-only
P: - spec-ret-imp-only
P: - spec-struct-imp-only
shortcut spec-imp-only
P: + spec-macros
m:-+++ spec-undef
P: - spec-undecl
P: - need-spec
shortcut export-any
m:---+ export-const
m:---+ export-var
m:---+ export-fcn
m:---+ export-iter
m:---+ export-macro
m:---+ export-type
このドキュメントはSplint(英)のサイトを元に作成しました
[PageInfo]
LastUpdate: 2014-02-11 15:08:26, ModifiedBy: daruma_kyo
[License]
Creative Commons 2.1 Attribution-ShareAlike
[Permissions]
view:all, edit:login users, delete/config:members