プロダクションとは何かを説明するために、最初に少し文脈を紹介したいと思います。
ドラゴン ブックでは、文脈自由文法には 4 つの構成要素があると述べています。
- 終端記号 (トークン) のセット
- 非終端記号 (構文変数) のセット
- 次の形式のプロダクションのセット: 非ターム --> 端末と非端末のシーケンス
- 開始記号として指定された非終端記号
構文解析とは、端末の文字列 (ソース コード) を取得し、文法の開始記号からこの端末の文字列を導き出すために必要な手順を理解する問題であるとも言われています。
そうは言っても、生産は本質的に可能な(中間の)ステップです。一部のシンボルは異なるシーケンスに派生する可能性があるため、可能だと言います。
たとえば、b で終わる a の任意の長さのシーケンスを表す単純な文法を作成してみましょう。この文法の 4 つのコンポーネントは次のようになります。
- 端子:a、b
- 非終端記号: S、X
- ルール: S --> X, X --> aX, X --> ab
- 開始記号: S
上記の説明から、「aaaab」はこの文法から導出できるはずです。それが続くかどうか見てみましょう。開始記号から開始し、a) 最終的なシーケンスを取得する、b) 成功せずにすべての可能性を使い果たす (シーケンスが「文法的に正しくない」ことを意味する) まで、プロダクションを適用します。
S
X (after applying S --> X)
aX (after applying X --> aX)
aaX (after applying X --> aX)
aaaX (after applying X --> aX)
aaaab (after applying X --> ab)
これで、元のシーケンスができました。ご覧のとおり、すべてのステップでシーケンスを新しいシンボルのシーケンスに変換するルール (再帰的に適用したルールの 1 つ) を適用して非終端記号を書き直し、最終的なシーケンスが得られるまでそれを行いました。