すべてのLL文法はLR文法ですが、それ以外の方法はありませんが、私はまだこの区別には苦労しています。私は、等価なLL表現を持たないLR文法の小さな例があれば、それがあるかどうか不思議です。LLで表現できないLR文法の例?
15
A
答えて
16
文法に関する限り、簡単な左回帰文法はLR(おそらくLR(1))であり、LLではありません。したがって、リスト文法のようなものは次のようなものです:リスト文法は、次のようなものです:リストの文法は、LR(1)(LRではありません)ではなくLLです。そのような文法は、左ファクタリングなどによってLL文法にかなり簡単に変換することができるので、あまり面白くない。
さらに興味深いのは、LRですがLLではなく、LR(1)文法は存在しますが、任意のkに対してLL(k)文法は存在しない言語です。オプションの末尾のマッチを必要とするものが例です。例えば、任意の数のa
シンボルの後に同じ数字またはそれ以下の数字が続くb
シンボルの言語ですが、それ以上ではありませんb
s - {a^i b^j | i> = j}となる。
S ::= a S | P
P ::= a P b | \epsilon
文法はありませんが、LL(k)文法はありません。その理由は、LL文法は、aを見るときにa + bペアまたは奇数aに一致するかどうかを決定する必要があるのに対して、LR文法はbまたは入力の最後を見るまでその決定を延期することができるからです。 cs.stackechange.com上
This postはむしろ考えにくいこの
関連する問題
- 1. なぜすべてのLL(1)文法LR(1)ですか?
- 2. LL文法とFIRST
- 3. LL(1)文法と解析
- 4. 文法を作るLL(1)
- 5. 文法LL(1)競合
- 6. Notes/Domino DXLで表現できない例は?
- 7. この文のLL(1)文法は何ですか?
- 8. LL(1)パーサーはプレフィックスのエンコーディングで効率的ですが、LR(1)はより効率的です。
- 9. prototype.jsの1.7キャッチされない例外:構文エラー、認識できない表現:[オブジェクトHTMLInputElementの]
- 10. 文字列がUTF-8で表現できない
- 11. ReactJS - 不明なエラー:構文エラー、認識できない表現
- 12. LL(k)文法に変換します
- 13. 構文エラー、認識できない表現:[のhref =#]
- 14. 構文エラー、認識できない表現:[名= ctl00 $ MainContentの$ mainProgress]
- 15. jQueryの構文エラー認識できない表現
- 16. 正規表現の曖昧でない文法
- 17. タプルパターンマッチングのSwift switch文で「等しくない」表現方法
- 18. 左の連想演算子は、トップダウンLL(1)パーサーが理解できるような方法で表現できますか?
- 19. エラー:構文エラー、認識できない表現に戻るHTML
- 20. 「認識できない表現 『$ addFields』」
- 21. 認識できない表現
- 22. キャッチされない例外:構文エラー、認識されない表現 - 配列
- 23. 文法の正規表現
- 24. BigDecimalクラスでJavaランタイムエラー "10進数で表現できない正確な表現ができません"
- 25. 正規表現の例では、3
- 26. LL(2)LL以外の言語(1)
- 27. 文字列で正規表現するか、文字列で正規表現しないか?
- 28. このXMLサブセットのLL(1)文法はありますか?
- 29. 文法がLR(1)であるかどうかを理解する
- 30. saxon .net 9.7正規表現の構文エラー:認識できないフラグ 'n'
についての言及がたくさんあります。その文法は 'if/else'とまったく同じように見えます。つまり、' statement :: = if(...)statement | if(...)statement else(...)statement'です。これは、私が知る限り、LLパーサによってうまく処理されます。 – Puppy
@DeadMG:あなたが気づいているように、他の文法は同じパターンなので、LLではないし、LLパーサでもきれいに扱うことができません。もちろん、手書きのパーサでは、アドホックな回避策(通常はこのケースではミニLRパーサ)を使用できますが、文法がLLではないという事実は変わりません。 –
興味深い。これは、この構文に従う事実上すべての*言語が非LL文法を持ち、事実上すべてのLLパーサ生成者が回避策を持っていなければならないということですか? – Puppy