C++ は、再帰降下パーサー、LL パーサー、または多少の困難と LALR パーサーを使用して実行できると言われていますが、これらのタスクにはハッキングとクラッジングが必要です。では、これらのパーサー タイプのそれぞれを、手間がかかる大きな問題なく実行できる、最も OOP に似た文法は何でしょうか? これらの各タイプのパーサーで禁止されている OOP 機能は何ですか?
2 に答える
C++ の最大の問題は、セミコロンに到達するまで、何かが宣言なのかステートメント/式なのかがわからないことが多いことです。これには、いくつかの LL アプローチ (通常は再帰降下) で実行できる「無限先読み」が必要です。ハッキングされた LALR アプローチが必要になることは間違いありません。(私は以前、LALR の発明者である Frank DeRemer で働いていました。彼らは、ハイブリッド アプローチを支援するために LL を好む人物として私を雇いましたが、結局、PCCTS の作成者である Terence Parr と共に Java トレーニング会社に切り替えました/私たちが本当にそれに入る前のANTLR)
他のほとんどの言語では、LALR 文法を作成するのはそれほど難しくありません。LL は通常、左再帰ルールを処理できないため、もう少し検討する必要があります (ANTLR 3 では処理できるようになりましたが、優先文法が必要な場合の使用方法にはいくつかの制限があります)。
LL、SLR、LALR、LR は、文法の大きなクラス、つまり構文を連続して定義します。
機能は、非 LL、非 SLR、非 LALR、非 LR などであるために OO である必要はありません。
逆に言えば、LL、LALR、または LR 文法でそれぞれ表現できない OO 機能は私が知っているものではありません。[関連する数十の言語で実際に行われているかどうかは別の問題です。]
要するに、あなたの質問は意味がありません。