回答:
少なくとも2つの関連する用途があります。
証明の単純さ
文脈自由文法の周りには、還元性やオートマトンとの等価性など、多くの証明があります。これらは、対処しなければならない文法のセットがより制限されているほど単純です。したがって、そこでは通常のフォームが役立ちます。
具体的な例として、Greibach正規形を使用して、すべてのCFL(εを含まない)に遷移のないPDA があることを(構成的に)示します。
構文解析を有効にします
PDAを使用して任意の文法の単語を解析できますが、これはしばしば不便です。通常の形式では、処理する構造が増え、解析アルゴリズムが簡単になります。
具体例として、CYKアルゴリズムはChomsky標準形式を使用します。一方、Greibachの正規形は、再帰下降構文解析を可能にします。バックトラッキングが必要な場合でも、スペースの複雑さは直線的です。
チョムスキー標準形を使用すると、多項式時間アルゴリズムで、文字列を文法で生成できるかどうかを決定できます。動的プログラミングを知っている場合、アルゴリズムは非常に滑らかです...
入力の長さ()がnの場合、dim n x nの 2次元配列(A)を取ります。
def decide (string s,grammar G):
//base case
for i=1 to n:
N[i,i]=I[i] //as the substring of length one can be generated by only a
terminal.
//end base case
//induction
for s=1 to n: //length of substring
for i=1 to n-s-1: //start index of substring
for j=i to i+s-1: //something else
if there exists a rule A->BC such that B belongs to N[i,j] and C
belongs to N[j+1,i+s-1] then add A to N[i,i+s-1]
//endInduction
if S belongs to N[1,n] then accept else reject.
インデックスがかなりおかしいように見えることは知っています。しかし、基本的にここで何が起こっているのでしょうか。
sub