2011-08-20 41 views
12

文法があり、LL(1)があるかどうかを確認できます。しかし、文法によって生成された言語がLL(1)かどうかを確認する方法はありますか? LL(1)文法とLL(1)言語の違いは何ですか?言語がLL(1)かどうかを調べる方法は?

+0

文法と言語の違いは何ですか? –

答えて

14

LL(1)である任意の文法はLL(1)言語を定義します。 LL(1)という文法がある場合、その言語のLL(1)文法が自動的にLL(1)であることを意味するため、LL(1) 。

説明すると、言語は一連の文字列であり、その言語の文法はその言語を記述する手段です。いくつかの言語はLL(1)文法を持ち、他の文法はLL(1)文法を有する。しかし、文法がLL(1)でないという事実は、それが記述する言語がそうではないことを意味するものではない。たとえば、この文法を考える:端子aを見るとAの生産を予測しようとすると、それはFIRST/FIRST紛争が含まれているため

A -> ab | ac 

この文法はLL(1)ではありません。しかし、言語はまた、文法で

A -> aX 
X -> b | c 

を説明しているので、それは、LL(1)言語を記述だから、(ちょうどABとACが含まれています)これらの文法によって生成された言語は確かにLL(1)です。

任意の文法で記述された言語がLL(1)かどうかを判断することはずっと難しく、私の知る限りでは、生成する言語のLL(1)文法を明示的に提示するしかありません最初の文法(これは難しい)によって、またはそのような文法が存在しないことを数学的に証明するために使用される。

希望すると便利です。

+1

LL(1)*言語*は、LL(1)文法でない限り、LL(1)以外のいくつかの他の*文法*によって定義することができますか? - 私の頭の中で確かめることを試みる。 –

+3

@pst、はい、1つのLL(1)文法があれば十分です。 –

関連する問題