2011-11-08 5 views
1

コンパイラが特定の言語用に作成されると、コンパイラを開発する人が言語を定義し、最初から言語が存在しないようにコマンドが実行されます(これは現実的ではないようです)。以前のコンパイラを使用する方法はありますか?どのように他の人がそれをするのですか?コンパイラの作成方法

答えて

0

すべては言語によって異なります。言語が存在しない場合は(もちろん、最初は何もしなかったことを覚えておいてください)、コンパイラの前に設計する必要があります。しかし、既存の言語を変更したい場合は、既存のコンパイラを使用して、必要な変更を加える方が簡単かもしれません。

私は個人的に自分自身を考え出し、ゼロからコンパイラを作成したいくつかのコンパイラを作成しました。場合によっては、lexYaccなどのツールを使用することもあります。

3

[ドメイン固有の]言語を定義するか、既存の言語を実装するかのどちらかです。

言語は、典型的には、特定の形式で書かれているが、コンパイラ(または少なくともレクサーとパーサ)を作成する1つの方法は、ツールを使用することであるBNF

と呼ばれる、YACC/LEXのようないくつかのツールがあり、ANTLRなどこれはコンパイラ用の生の配管を生成し、ファイルをトークン化し、トークンを解析するために使用することができます。 C#、Java、Cコードパーサー/レクサーを生成する使いやすいツールの例については、antlr.orgを参照してください。

0

コンピュータの生まれてから言語の評価が始まり、1960年頃に最初の最適化コンパイラが登場しました。

あなたの質問に対する最も簡単な答えは、まず言語設計が始まり、次にコンパイラ開発者が標準に従ってコンパイラを開発するということです。そして、言語設計者はユーザーコミュニティからのフィードバックを得て、言語標準を変更し、コンパイラー開発者はこの新しい標準に再び取り組んでいます。

compiler support for C++0x standard

通常、コンパイラの開発者は、コンパイラのすでにサポート機能を使用する新しい言語機能のサポートを開発。

2

コンパイラがコンパイルする同じ言語で書かれていると仮定していると思います。これはそうではありません。このプロセスは、ブートストラップと呼ばれます。最初のC#コンパイラはC++で書かれていました。最初のC++コンパイラはCで書かれました。最初のCコンパイラはBで書かれました。最初のBコンパイラはBC​​PLで書かれました。それを越えて、それはあいまいになり、古代の歴史とそのすべて。これは最終的に、トグルスイッチを備えたマシンにプログラムを入力する誰かに戻ることになります。

質問の最初の部分に対処する:はい。誰も、言語の文法の非常に強い定義なしにコンパイラの作成を述べることはありません。これは紙の上で行うことができます。

+0

私はそれを前提にしていません。私は新しい言語用の最初のコンパイラの作成について話しているわけではありません。すでに存在する言語のコンパイラを作成することです。 –

+1

それから私はあなたが何を求めているのか分かりません。特に、 "これは現実的ではないようです"というコメントは混乱しています。 –

+0

@ Samehなので、あなたはすでに存在する言語*と*を同時に話しているのですが、 "言語を定義してください...もし言語が決して存在しなかったとしても":矛盾のように思えます。 。 – inger

関連する問題