3

このドキュメントを読むと、最後に次の 1 つの文があります。

歴史的に、C++ や Fortran を含む多くの言語のコンパイラは、C などの別の高級言語を出力する「プリプロセッサ」として実装されてきました。

プリプロセッサやドキュメントについて何も知りませんか? これらすべての言語が C ソース コードに翻訳されるということですか。

4

4 に答える 4

2

一部の言語は、コンパイラが C コードを生成し、それが C コンパイラによってコンパイルされることによって実装されています。注目すべき例は次のとおりです。

  • 初期の C++ (およびそれ以前のクラスを含む C) — cfrontC++ コードから生成された C コード。C++ が例外をサポートすると実用的ではなくなりました (詳細については、Stroustrup The Design and Evolution of C++を参照してください) が、すべての C++ コンパイラがこの手法を使用したわけではありません (実際、それ以外のコンパイラを知りませんcfront)。
  • yacc は C コードにコンパイルされます。Bison は C または C++ コードにコンパイルできます。
  • Lex は C コードにコンパイルされます。Flex は C または C++ コードにコンパイルできると思います。
  • Informix ESQL/C は、Embedded SQL を純粋な C に変換します。
  • Informix 4GL は、I4GL ソースを ESQL/C に変換し、ESQL/C コンパイラを使用して C コードを作成し (さらに C コンパイラを使用してオブジェクト コードと実行可能ファイルを作成します)、マルチステージ コンパイラを備えています (私は少し)。
于 2013-07-27T06:51:45.837 に答える
1

「プリプロセッサ」というフレーズは、現在ではまったく異なる意味を持ち、ここで使用すると混乱を招きます。しかし、はい、ここでは、一部のコンパイラがそのソースを別の言語に出力することを意味します。

それはsource to source compilerと呼ばれるべきです。例の 1 つは、C++ を C に変換したCfront (Bjarne Stroustrup 自身によって設計された) です。

C++ における「プリプロセッサ」という語句の通常の意味については、こちらを参照してください。

于 2013-07-27T05:05:08.577 に答える
-1

いいえ、必ずしもそうではありません。多くの C++ コンパイラは、GCC ドキュメントのように (gcc/g++ ではなく)、C コード出力を生成します。なぜ彼らはこれを行うのですか?そのため、C コンパイラがコンパイルできるすべてのバックエンド実行可能コード (X86、AMD など) にピギーバックできます。宛先コードとして C を使用することで、バックエンドのローエンド コーディングを大幅に節約できます。このようなコンパイラには、元の Cfront および Comeau C/C++ が含まれます。

于 2013-07-27T05:04:42.113 に答える