より多くのプログラミング知識を求める私の不朽の渇きを癒すための継続的な努力の中で、バイトコードにコンパイルされる(少なくとも今のところ)単純なプログラミング言語を書こうとするアイデアを思いつきました。問題は、言語デザインについて最初にわからないことです。パーサーを構築するための方法論と、すべての言語が持つべき基本的な機能について何かアドバイスはありますか?言語デザインのためにどのような読書をお勧めしますか?どのくらいのレベルで撮影する必要がありますか?インラインアセンブラを許可するgccと同様の方法で、バイトコードをインライン化できる機能を含めることができると期待するのは非現実的ですか?私が主にCとJavaでコーディングしているのを見て、コンパイラーの作成に適していますか?
3 に答える
非常に多くの方法があります...
スタック言語と Forth を調べることができます。他の言語の設計に関してはあまり役に立ちませんが、非常に迅速に実行できるものです。
関数型言語を調べることができます。それらのほとんどは、いくつかの単純な概念に基づいており、単純な解析を備えています。それでも、彼らは非常に強力です。
そして、伝統的な言語。彼らは最も難しいです。構文解析を乗り越えるためには、字句解析器、パーサー、LALR 文法、LL 文法、EBNF、および通常の言語について学ぶ必要があります。
バイトコードをターゲットにすることは、単に良いアイデアというだけではありません。それ以外のことを行うのは非常識であり、ほとんどの場合、学習の演習では役に立ちません。
ぜひ、コンパイラに関する本やチュートリアルを調べてください。
C または Java のいずれかで十分です。オブジェクト指向はこのタイプのタスクに適しているため、Java にはおそらく利点があります。個人的なおすすめは Scala です。この種のことを行うのに適した言語であり、途中で言語設計について興味深いことを教えてくれます。
最初にコンパイラに関する本を読むことをお勧めします。
何が起こっているのかを本当に理解するには、おそらく C でコードを書きたいと思うでしょう。
Jythonなどのインタープリター言語を作成する場合、Java は悪い選択ではありません。しかし、機械語にコンパイルしたいように聞こえるので、C の方が簡単かもしれません。