web-dev-qa-db-ja.com

独自のプログラミング言語を作成する

重複の可能性:
C/C++でインタプリタを実装するために必要な参照
最近の言語の作り方は?
コンパイラの書き方を学ぶ

私はいくつかのc ++を知っています、phpが非常に得意で、css htmlがプロで、javascriptが大丈夫です。だから私はc ++がどのように作成されたかを考えていました。つまり、コンピューターがコードの意味をどのように理解できるのでしょうか。どのように読むことができますか...それで、私は自分の言語を作成することができますか?

37
Ramilol

コンパイラの設計(「コンピュータがコードの意味をどのように理解できるか」)に興味がある場合は、 Dragon Book を強くお勧めします。私は大学時代にそれを使用し、プログラミング言語を自分で作成するところまで行きました。

47
Nikita Rybak

「時々、プログラミング言語を設計したいという誘惑を感じますが、それがなくなるまで横になります。」 —L。ピータードイチュ

編集(コンテキストを切望する人のために):

"[L。PeterDeutsch]は、PDP-1 LISP1.5の実装であるBasicPDP-1 LISPも作成しましたが、「12〜15歳の間はまだ短パンです。」

37
anthony

コンピューターがコードをどのように理解するかを理解したい場合は、アセンブリ言語を学ぶことをお勧めします。これははるかに低レベルの言語であり、実際に実行される単純な命令の種類をよりよく理解できるようになります。また、条件付きジャンプのみを使用したループなど、より高レベルの構成を実装する方法についても理解できるはずです。

さらに低いレベルの理解のために、あなたは電子工学について勉強する必要があるでしょう。デジタルロジックは、電子的な「ゲート」を取得して、アセンブリ言語コードから生成されたマシンコードを理解できる汎用CPUを実装する方法を示しています。

本当に低レベルのものについては、実際にゲートを原子レベルで機能させる方法を教えることができる材料科学を学ぶことができます。

あなたは機知に富んだ人のように聞こえます。理解のレベルに合わせて調整され、最も興味のあることに焦点を当てたこれらのトピックに関する本やWebサイトを探し出すことをお勧めします。これらすべてをかなり完全に理解するには、コンピュータサイエンスまたはコンピュータエンジニアリングの学士号が必要ですが、あなたの立場にあるやる気のある人には、多くのことが非常に理解できます。

19
Mr Fooz

はい、独自の言語を作成することは可能です。コンパイラコンパイラを見てください。または、あえていくつかのスクリプト言語のソースコード。いくつかの便利なツールは、yaccとbisonとlexxです。

他の人はドラゴンの本に言及しました。大学時代は「コンパイラ理論と実践」と呼ばれていた本を使いました。

言語を書くためにアセンブラーを学ぶ必要はありません。たとえば、Javascriptは、javascriptファイルを実行するアプリケーションであるインタプリタと呼ばれるもので実行されます。この場合、インタプリタは通常ブラウザに組み込まれています。

最も簡単な開始プログラム言語は、単純なテキストベースの計算機を書くことかもしれません。つまり、テキストファイルを取得し、それを実行して計算を実行します。あなたはそれをC++で非常に簡単に書くことができます。

大学のプロジェクトでの私の最初の言語は、私たちに与えられたBNFで定義された言語でした。次に、それを解析してメモリ内のツリー構造にし、次に3アドレスコード(アセンブラのようなもの)と呼ばれるものに解析するパーサーを作成する必要がありました。 3番地コードを実際のアセンブラに変換するか、そのためのインタプリタを作成するのは非常に簡単です。

11
Matt

うん!それは間違いなく可能です。ドラゴンブックについて言及している人もいますが、オンラインにもたくさんの情報があります。たとえば、llvmには、プログラミング言語の実装に関するチュートリアルがあります。 http://llvm.org/docs/tutorial/

7
Niki Yoshiuchi

私は本当にお勧めします プログラミング言語語用論 。これは、言語とは何かから、コンパイラーの動作方法や独自の言語の作成まで、すべてを網羅したすばらしい本です。ドラゴンブックよりも少しアクセスしやすく、真っ先にジャンプする前に物事がどのように機能するかを説明しています。

4
Rohan Singh

はい!コンパイラーに興味を持つことは、プロのCSへの私のフックでした(以前はEEへの道を進んでいましたが、大学では正式にチームを切り替えただけでした)。これは、コンピューターサイエンスの幅広いトピックについてTONを学ぶのに最適な方法です。あなたは少し若いですが(私がパーサーや通訳をいじり始めたとき、私は高校生でした)、最近あなたの指先にはもっとたくさんの情報があります。

小さく始める:考えられる最も小さな言語を設計します。変数の割り当てと置換を可能にする単純な数学計算機から始めます。冒険に出たら、「if」またはループを追加してみてください。 Lexやyaccのような難解なツールを忘れて、単純な再帰下降パーサーを手動で記述してみてください。単純なバイトコードに変換して、そのインタープリターを記述してください(特定のマシンのアセンブリーの理解、レジスタ割り当てなどの難しい部分はすべて避けてください)。このプロジェクトだけで、途方もない量を学ぶことができます。

他の人と同じように、私はドラゴンの本をお勧めします(1986年版、率直に言って、新しいものは好きではありません)。

他のプロジェクトについても追加します。私が言語の大物だからではなく、C/C++の難しさを克服することで、より多くのことを学ぶことができると思うので、CまたはC++を使用してPHPを捨てることをお勧めします。根本的なマシンアーキテクチャとコンパイラの問題。

(注:あなたが専門家であれば、新しい言語を作成しないことをお勧めします。それが正しい解決策になることはほとんどありません。しかし、学習と探索のプロジェクトとしては素晴らしいです。)

3
Larry Gritz

可能です。コンパイラーやインタープリターについて学ぶ必要があります:それらが何のためにあり、どのように作られているのか。

3
Bernard

ASMの学習を開始し、バイトコードがどのように機能するかを読んでください。そうすれば、チャンスがあるかもしれません:)

3
Marc Towler

Cを知っているなら、あなたがそうしているように聞こえますが、この古代の本の使用済みコピーを入手してください: http://www.Amazon.com/Craft-Take-Charge-Programming-Book-Disk/dp/ 0078818826

その中には、作者がCで「C」インタプリタを作成する章があります。ドラゴンの本のように学術的に深刻ではありませんが、非常にシンプルで、非常に実用的で、わかりやすいことを覚えています。始めに、それは言語のための「文法」とプログラムの「トークン化」のアイデアへの素晴らしい入門書になるでしょう。

それはあなたが始めるのに最適な場所でしょう。また、中古コピーは0.01ドルで、ドラゴンブックよりも安い。 ;)

3
Ben Zotto

パーサーの作成から始めます。 EBNF文法を読んでください。これは、コンピューターがコードを読み取る方法についての質問に答えます。これは非常に高度なトピックなので、あまり期待しないで、楽しんでください。これに使用したリソースには、bison、flex、および [〜#〜] ply [〜#〜] があります。

3
gtrak

このトピックの非常に一般的な(しかし非常によく書かれた)紹介(コンピューティングの基礎)が必要な場合は、Charles PetzoldによるCodeというタイトルの本を強くお勧めします。彼はあなたが興味を持っている多くのトピックを説明し、そこからあなたはあなたがあなた自身を作りたいものを決めることができます。

1
Ulysses

この本をチェックしてください コンピューティングシステムの要素:最初の原則から現代のコンピューターを構築する コンピューター言語、コンパイラー、仮想マシン、アセンブラー、およびアセンブラーの設計のいくつかの側面を段階的に説明します。コンピュータ。これはあなたの質問のいくつかに答えるのに役立つと思います。

1
cirons42