4

私はコンパイラがどのように機能するかを大まかに理解しています (つまり、言語、文法、字句解析、構文解析など)。ルール エンジンには、文法にルールがあり、ANTLR などのパーサー ジェネレーター ツールでそれらにアクションを関連付けることができるように、さまざまなルールと関連付けられたアクションがあります。したがって、これら2つを区別する方法について少し混乱しています。違いについて、より明確で正式な説明ができる人はいますか?

ありがとう、アビナフ。

4

1 に答える 1

4

ルール エンジンには、ファクトのデータベースと、データベースの要素を検査し、ファクトを変更、挿入、または削除できる一連のルールがあります。通常、データベースはタグ付けされた一連の構造 (T V1 V2 ... Vn) で構成され、それぞれが異なるタイプの値 V_i を持ちます。多くの場合、ルールは、構造インスタンスのいくつかのセットがプロパティ [これらの構造の値に対する何らかの条件、これは結合的または分離的である場合があります] を持っている場合、一致した構造の 1 つの 1 つ以上の値が変更されることを指定するパターンです。または、一致した構造が削除されるか、計算された値のセットを含む新しい構造が挿入されます。非常に洗練されたルール エンジンは、ルールをそのような構造として扱い、ルールを挿入および削除することもできますが、これは非常に珍しいことです。ルール エンジン (効率的に、これが難しい部分です) は、どのルールのセットがいつでも一致するかを判断し、1 つを選択して繰り返し実行します。このアイデアの価値は、大まかに独立した「事実」(タグ付けされた構造によってそれぞれが表される)の任意のバケツと、同様に独立したルールのセットを持ち、それらを統一された方法で一緒に注ぐことができるということです。世界の側面を表す構造を簡単に定義でき、それらを操作するためのルールを簡単に定義できることが期待されます。それは多くの異なる知識をコーディングする方法であり、それが「ビジネス」の人がそれらを好む理由です. (アイデアはAIの世界から来ています)。(タグ付けされた構造で表される) と、同様に独立したルールのセットをまとめて、統一された方法で注ぎます。世界の側面を表す構造を簡単に定義でき、それらを操作するためのルールを簡単に定義できることが期待されます。それは多くの異なる知識をコーディングする方法であり、それが「ビジネス」の人がそれらを好む理由です. (アイデアはAIの世界から来ています)。(タグ付けされた構造で表される) と、同様に独立したルールのセットをまとめて、統一された方法で注ぎます。世界の側面を表す構造を簡単に定義でき、それらを操作するためのルールを簡単に定義できることが期待されます。それは多くの異なる知識をコーディングする方法であり、それが「ビジネス」の人がそれらを好む理由です. (アイデアはAIの世界から来ています)。

コンパイラパーサーには、1 つのアクティビティに絡み合った 2 つのタスクがあります。1) テキストの入力ストリーム (言語トークンに分割) が特定のプログラミング言語の正当なインスタンスであるかどうかを判断し、2) 正当な場合は、コンパイラのデータ構造 (通常は抽象構文ツリー) を構築します。これらはプログラムを表し、コンパイラの残りの部分がコードを生成できるようにします。コンパイラーの人々は、これを高速化する方法を考え出すのに約 50 年を費やし、非常に特殊なアルゴリズム (文法規則ごとにカスタム コード化されたアクションを備えた LALR パーサー ジェネレーターなど) を使用して仕事を成し遂げてきました。

間違いなく、ルールエンジンを使用してコンパイラーパーサーを実装できます。トークン ストリームで構成されるデータ型と、AST ノードおよびシンボル テーブル エントリに対応するその他のデータ型が必要です。パーサーをコーディングするのはおそらく難しく、コンパイラーパーサーの速度に近づくことはほとんどありません。そのため、誰もこれを行いません。

コンパイラ パーサーを使用してルール エンジンを実装することはできません。したがって、ルール エンジンは厳密にはより強力です。

于 2010-05-06T08:50:43.207 に答える