与えられた文脈自由言語Gについて、場合、非終端の nullableを呼び出します。つまり、有限数のプロダクションを適用した後、から空の文字列を導出できます。A i → ∗ ϵ A i
ここで見つけることができるように、文法の非終端記号がnull可能であるかを決定するための単純なアルゴリズムがあります:
最初に、すべての非ターミナルをnull入力不可と見なすことから始めます。プロダクションがある場合、すべてのをnull可能としてマークします。次に、他のすべてのプロダクションをループ処理し、ターミナルが含まれるプロダクションを除外し、すべてのがnull 可能である場合は、をnull可能としてマークします。このループは、非終端記号をヌル可能としてマークせずにループが終了するまで続けます。A i → ϵ A i → B 1 B 2 … B k A i B i
このアルゴリズムの私の問題は、実行時間がということです。最悪のケースは、例えば、、、...、、。A 1 → A 2 A 2 → A 3 A 3 → A 4 A n − 1 → A n A n → ϵ
よりも実行時間が短いこの問題のアルゴリズムはあり ますか?