第2章 SmallOPSの概要

参考

SmallOPS を発展させた Toy Open Production SystemSourceForge.jp にて公開しています。

また、本コンテンツを書くに辺り、以下の参考書を参考にしています。

2. 1. 前向き推論型プロダクションシステム SmallOPS

SmallOPS(Small Official Production System)とは、 C/C++で書かれたOPS5と似た文法を持つ簡単な前向き推論型のプロダクションシステムである。 SmallOPSは、プロダクションシステムの諸概念がクラスとしてすっきり表現されているため その構成がわかりやすいのが特徴である。 これ以降の教材としてSmallOPSを取り上げるため、 まずは以下のリンクをたどりそのソースコードをダウンロードしておくと便利である。

SmallOPS version 1.0.1 ソースコード

SmallOPSは、文法解析にantlr 2.7.0というパーサジェネレータを使用している。 従って、以上のソースコードをコンパイルするためには、 antlrを事前にセットアップしておくことが必要である *1。 antlrはマルチプラットフォームを意識して製作されたパーサジェネレータであり、 UNIX・Linux・Windowsのいずれの環境でも動くものである。 また、SmallOPS自体もマルチプラットフォームを意識して製作したものである。 従って、場合によっては多少のコード修正を行う必要があるが UNIX・Linux・Windowsのいずれの環境でもコンパイルできると期待される。 SmallOPSには、Windows環境用にMicrosoft Visual C++ 6.0用のプロジェクトファイルと UNIX・Linux環境用に簡単なMakefileが用意されている。

また、メモリ管理を簡略化するために本プログラムではスマートポインタを多用しており、 そのためにBoost C++ Librariesというライブラリをセットアップしておくことも必要である。 スマートポインタについては以下のページの説明を参考にするといくらかの知識を得ることができる。

スマートポインタについて

全ての人が以上のソースコードを自分でコンパイルして、 動かしながら本ページを読み進めるられることが望ましい。 しかし、コンパイルするためにはantlrのセットアップや場合によってはソースコードの修正などを行う必要があり、 またコンパイルする環境を持っていない人などがいることも予想されることから 本ページでは、SmallOPSの実行結果を出力するCGIプログラムを用意した。 以下のフォームの実行ボタンを押すと、新しいウィンドウにSmallOPSの実行結果が出力される。


ソースコードをわざわざダウンロードしてコンパイルするのが面倒と思われる方も、 プロダクションシステムとはどういうものなのか、まずは雰囲気だけでも味わっていただけたらと思う。 SmallOPSの仕様に関しては以下で説明している。

*1: ただし、Windows環境を使用している人はセットアップ済みのantlrが既に添付してある。

2. 2. SmallOPSの仕様

2. 2. 1. 文法

SmallOPSはOPS5と同じ文法を持っているため、 事実およびプロダクションルールで使用される基本的な要素はOAV形式で表現される。 そのうちOPS5と異なるのは、属性値に書くことのできる値である。 SmallOPSで書くことのできる属性値は以下の3つである。

アトムとは、名前を表す記号であり英字・数字からなる文字列である (SmallOPSは日本語には対応していない点に注意)。 それに対して、整数値は数字だけからなる値である。

また、行動部にはワーキングメモリに新しい事実を追加するmakeだけが使用可能である。

これらの文法に関しては、antlr 2.7.0が使われている。 library/parser/parser.gがantlrへの入力となる文法ファイルである。

2. 2. 2. 競合解消

SmallOPSは競合解消を行う戦略として、以下に示すような単純なアルゴリズムを採用している。


前へ:プロダクションシステムとOPS5
次へ:全体構成