[解決済み] なぜC++はLR(1)パーサーでパースできないのか?
2022-04-27 21:50:05
質問
パーサーとパーサー ジェネレーターについて読んでいたところ、wikipedia の LR parsing - page でこの記述を見つけました。
<ブロッククオート多くのプログラミング言語は、LRパーサーのいくつかのバリエーションを使用して解析することができます。注目すべき例外は C++ です。
なぜそうなのでしょうか?C++のどのような特性が、LRパーサーでの解析を不可能にしているのでしょうか?
googleで調べたところ、C言語はLR(1)で完璧にパースできるのに、C++はLR(∞)が必要ということだけわかりました。
どのように解決するのですか?
に興味深いスレッドがあります。 究極のラムダ を議論しています。 C++のためのLALR文法 .
へのリンクが含まれています。 博士論文 には、C++のパースに関する議論が含まれており、その中で次のように述べられています。
C++の文法は曖昧である。 コンテキストに依存し、潜在的に を解決するために、無限のルックヘッドが必要です。 ある種の曖昧さ" 。
さらに、いくつかの例を挙げている(pdfの147ページ参照)。
その例とは
int(x), y, *const z;
意味
int x;
int y;
int *const z;
と比較してください。
int(x), y, new int;
意味
(int(x)), (y), (new int));
(カンマで区切られた式)を使用します。
2つのトークン列は、最初の部分配列は同じだが、最後の要素に依存する解析木が異なる。曖昧さ回避のためのトークンの前には、任意の数のトークンが存在する可能性があります。
関連
-
[解決済み] 既に.objで定義されている-二重包含はない
-
[解決済み] using namespace std;」はなぜバッドプラクティスだと言われるのですか?
-
[解決済み] 要素ごとの加算は、結合ループよりも分離ループの方がはるかに高速なのはなぜですか?
-
[解決済み] なぜC++はPythonよりもstdinからの行の読み込みが遅いのですか?
-
[解決済み] なぜテンプレートはヘッダーファイルでしか実装できないのですか?
-
[解決済み] なぜ、オブジェクトそのものではなく、ポインタを使用しなければならないのですか?
-
[解決済み] 0.1fを0にすると、なぜ10倍もパフォーマンスが落ちるのですか?
-
[解決済み] C++で仮想関数が必要な理由とは?
-
[解決済み] switch文の中で変数を宣言してはいけないのはなぜですか?
-
[解決済み】なぜPythonはこのJSONデータをパースできないのですか?[終了] PythonがこのJSONデータをパースできないのはなぜですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] error: 'ostream' does not name a type.
-
[解決済み】C++ 式はポインタからオブジェクトへの型を持っている必要があります。
-
[解決済み】「corrupted size vs. prev_size」glibc エラーを理解する。
-
[解決済み】エラー:free(): 次のサイズが無効です(fast)。
-
[解決済み】指定範囲内の乱数で配列を埋める(C++)
-
[解決済み】浮動小数点数の乱数生成
-
[解決済み] gdbを使用してもデバッグシンボルが見つからない
-
[解決済み】Visual Studioのデバッガーエラー。プログラムを開始できません 指定されたファイルが見つかりません
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み] トークナイザー」「パーサー」「レキサー」とは何か、どのような関係にあり、どのように使われるのか、明確な定義をお探しですか?