5

プロのプログラマーが独自のプログラミング言語をどのように作成しているのか疑問に思っていました。
テキストファイルを読み取り、それから実行可能ファイルを作成するコンパイラのみを作成しますか(構文エラーなどがないことを考慮して)?

私は自分のプログラミング言語を作成するつもりはありません (私は明らかに経験が浅いため)、彼らがどのようにそれを行うのか知りたいだけです.

4

4 に答える 4

3

コンパイラの構築について読む必要があります。主な分野には次のようなものがあります。

  • 字句解析
  • 構文解析
  • セマンティック分析
  • コードの最適化
于 2013-03-10T13:56:05.570 に答える
3

興味がある場合は、Udacity で受講できる優れた無料のコースがあります。https ://www.udacity.com/course/cs262 (プログラミング言語 - Web ブラウザーの構築)。まだコースの途中ではありませんが、いくつかの興味深い概念と語彙分析の​​基礎を学びました。Web ブラウザーはプログラミング言語とは何の関係もないと思うかもしれませんが (私はそうでした)、実際には、コードを実行可能な形式にコンパイルすることを除いて、ほとんど同じことを行います。どちらもコードを読み取り、解析し、lex し、言語の仕様に従って解釈する必要があります。JavaScript は、最新のすべてのブラウザーに組み込まれている非常に強力な言語でもあります (他の多くの「言語」もブラウザーによって解釈されます)。

To give you another example, the inaugural implementation of Python was implemented in the C programming language. This allows python programs to make use of C source code. There is also a Java take on Python (jython) that interoperates with Java programs. What makes Python Python (if you ignore the batteries-included aspect of it) is the language specification which includes things like what are the reserved words, how objects are stored in memory, what kind of expressions and control structures are valid, etc. etc. I'm by no means knowledgeable enough to develop a 'serious' language like Python. But someone who is would have to develop it in another language. Even if you did have the ability to develop another language, you would have to have something special for it to become widely used, as there are thousands of programming language, many of which are considered hobby languages (for example, there are languages designed so that their source code will resemble a Shakespeare play, or a recipe).

于 2013-03-10T14:13:03.950 に答える
2

ほとんどの場合、誰かがプログラミング言語を必要とするとき、彼らは「ドメイン固有言語」を作成しています。基本的に、彼らは解決する必要がある問題のために構築されたプログラミング言語を作成しています。

通常、これらのプログラミング言語は実行可能なコードを生成しません。彼らは通常、プログラムを分析し、プログラムのステートメントを簡単に評価できるように配置されたプログラムの表現であるデータ構造をメモリ内に生成します。次に、データ構造を一連のアセンブリ言語命令に変換するのではなく、そのデータ構造から直接これらのステートメントを評価します。

これを行うプログラミング言語は「解釈された」と呼ばれます。また、このカテゴリに分類される非常に人気のあるプログラミング言語がいくつかあります。このような言語に使用される別の用語は、「スクリプト言語」です。すべてのスクリプト言語は解釈されますが、すべての解釈された言語がスクリプト言語と呼ばれるわけではありません。

CPU が直接実行する「実行可能ファイル」または一連の命令を生成する戦略は、「コンパイル」と呼ばれます。そして、この戦略を使用する言語は「コンパイル済み」言語と呼ばれます。C と C++ はどちらもコンパイル済み言語です。

興味深い点の 1 つは、コンパイルまたは解釈が異なる実行戦略にすぎないことです。C インタープリターを作成することは可能であり、Python プログラムをコンパイルすることは可能です。しかし、ある実行戦略を使用して広く受け入れられている言語が、別の実行戦略を使用する実装を目にすることはめったにありません。

したがって、新しいプログラミング言語を作成するためにプログラマーが行う最も重要なことは次のとおりです。

  1. 字句解析器および/またはパーサーを作成します。(これは、一連の文字をプログラムを表す内部データ構造に変換する部分です。)
  2. データ構造によって表されるステートメントを実行する実行エンジンを作成します。

通常、ドメイン固有言語の構文は、最初のステップを非常に簡単にするために選択されます。プログラマーが既存のパーサーを再利用できるように既存の言語に非常に近い構文が選択されるか、言語を非常に簡単に解析できるようにするために特別に構文が選択されます。

2 番目のステップは、一般的にかなり簡単ですが、一部の言語機能によっては非常に複雑になる場合があります。

于 2013-03-20T15:42:46.777 に答える