1. ホーム
  2. grammar

[解決済み] ペアワイズディスジョイントテストを用いた文法がLLであるかどうかの判定

2022-01-28 19:11:12

質問

3つの文法があります。

A -> aB|b|CBB

B -> aB | ba | aBb

C -> aaA|b|caB

私は、各非終端記号の各RHSの最初の集合を示すペアワイズディスジョイントテストを実行することによって、[それら]がLL文法であるかどうかを決定する必要があります。

今のところ、こんな感じです...。

A -> aB|b|CBB

first(aB) = a

first(b) = b

ファースト(CBB) = aaA = a

これが悩みの種なんです。CBBは正しくできたのでしょうか?もしそうなら、それらは交差する&ルールはテストに失敗すると言うでしょう。(ですよね?)

B -> aB | ba | aBb

first(aB) = a

first(ba) = b

first(aBb) = a

このルールはテストに失敗します。

C -> aaA|b|caB

first(aaA) = a

first(b) = b

first(caB) = c

両者は交差していないため、ルールは成立する

解決方法は?

このテストのポイントは、最初の端末を見たときに、どのルールを使うかわかるかどうかです(LLの要件です)。 Bの場合、端末aに適用できるルールが2つあることは明らかです。また、Cのルールはそれぞれ異なる端末で始まることも明らかです。 そして、C(したがってCBB)の可能な最初の端末は、Aに対する他のルールと重なっていることがわかります。

結論:よさそう(ただし、CBBで1つの端末で止まっていて、たまたまcを選んでしまったら、間違った結論になっていたかもしれません)。