タグ付けされた質問 「lr-k」

2
LL(k)とLR(k)の文法を区別する方法はありますか?
私は最近、コンパイラの設計について勉強しています。LL文法とLR文法の2種類の文法について知りました。 また、すべてのLL文法がLRであり、LL文法がLR文法の適切なサブセットであるという事実も知っています。1つ目はトップダウン解析で使用され、2つ目はボトムアップ解析で使用されます。 しかし、特定の文法がLLまたはLRであると言えるようにする方法はありますか?

2
言語のLR(1)オートマトンは、対応するLR(0)オートマトンよりどのくらい大きくできますか?
LR(0)パーサーでは、各状態はLR(0)アイテムのコレクションで構成されます。LR(0)アイテムは、位置で注釈が付けられたプロダクションです。LR(1)パーサーでは、各状態はLR(1)アイテムのコレクションで構成されます。これは、位置と先読み文字で注釈が付けられたプロダクションです。 LR(1)オートマトンの状態が与えられると、各LR(1)アイテムから先読みトークンを削除することによって形成される構成セットは、LR(0)オートマトンのいくつかの状態に対応する構成セットを生成することが知られています。その意味で、LR(1)オートマトンとLR(0)オートマトンの主な違いは、LR(1)オートマトンにはLR(0)オートマトンの状態のコピーが多く、それぞれに先読みが付いていることです。情報。このため、特定のCFGのLR(1)オートマトンは、通常、そのCFGの対応するLR(0)パーサーよりも大きくなります。 私の質問は、LR(1)オートマトンをどれだけ大きくできるかです。ある場合は文法のアルファベットの明確な終端記号は、その後、原則的に、我々は、少なくとも一回のサブセットあたりLR(0)オートマトンの各状態を複製する必要があるかもしれません 1(LRにつながる潜在的に、明確な終端記号)オリジナルのLR(0)オートマトンより倍大きいオートマトン。LR(0)オートマトンの個々のアイテムがそれぞれ異なるLR(0)アイテムのセットで構成されている場合、さらに大きなブローアップが得られる可能性があります。n 2 nんnnんnn2ん2n2^n とはいえ、LR(1)オートマトンが対応するLR(0)オートマトンより大幅に大きい文法のファミリーを構築する方法を見つけることができないようです。私が試したすべてのことで、サイズはわずかに大きくなりました(通常は2〜4倍程度)が、大きな爆発につながるパターンを見つけることができないようです。 LR(1)オートマトンが対応するLR(0)オートマトンより指数関数的に大きい、文脈自由文法の既知のファミリーはありますか?それとも、最悪の場合、実際には指数関数的な爆発が起こらないことがわかっていますか? ありがとう!
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.