C ++構文を説明するパスカルスタイルの鉄道図はどこにありますか?(EBNFの代替として)
3 に答える
私の知る限り、存在しません。C++ 構文は、適切な EBNF で表現することさえできません。これは文脈依存の文法であり、それを解析しようとするものはすべて、少なくともテンプレートのインスタンス化とオーバーロードの解決 (マクロは言うまでもありません) まで、C++ コードを処理できなければなりません。 )。
C++ ダイアグラム用の鉄道ダイアグラムがあるかどうかはわかりませんが (これらのイメージはあまり評価しません)、EBNF をこれらのダイアグラムに変換するのは純粋に機械的な作業です。
C++ の文法について: C++ 標準の付録の文法を見ると、それは文脈自由文法です。この文法の問題点は、あいまいな文法であることです。もう 1 つのことは、文法は有効な C++ プログラムではない文字列を受け入れますが、これは変数宣言を持つすべての型付き言語に当てはまります。文法が undecidable だった場合、文字列が文法に従って生成されたかどうかを判断できないことを意味します。ところで、テンプレートはチューリング完全であるため、特定の C++ ファイルがコンパイルされるかどうかは、実際には決定できない問題です。
このあいまいな文法が嫌われている理由は、パーサーがはるかに複雑になり、遅くなり、より多くのメモリが必要になるためです。
1 つもありません。C++ の文法は文脈自由であるだけでなく、決定不能です。見るhttp://yosefk.com/c++fqa/defective.html#defect-2および関連するリンクで、より詳細な議論を行ってください。