

コンパイラは、作ったことないです。でも、作ってみたい。
コンパイラを作るには、CPUやOSの実行形式のフォーマットを知らないといけませんね。この部分を詳しく知ろうと思うと、難しそうな本のどれを読めばいいのかわかりません。読んでもほとんど載ってませんけどね。で、次に取る手段は、他のプログラムをいろんな方法を使って読んでみるわけです。8ビットな時代なんかだと、七つ道具(ファイルダンプ打ち込みツール・デバッグツール・ディスク編集ユーティリティ・アセンブラ・BASICチェックサム・あと2つは人それぞれ)を雑誌から打ち込んだり自作して使ってた人も多いと思いますが、今ではそんなことしませんね。高度なプログラミングの入門はここからですから、雑誌に載ってなかったりフリーソフトに無くても、この関連のツールの幾つかは自作しておくことをお勧めします。更には、アーカイバなんていうのも自作してみるとおもしろいんじゃないでしょうか。
しかし、BASICは文字列の編集やテキストの表示位置の指定なんていう命令があったので簡単でしたけど、C言語で開発するときは、エスケープ・シーケンスを使わなくてはならなかったり、文字列は関数で処理しないといけなかったり、結構大変かもしれないですね。GUIで作ろうなんて思うと尚更ですから、簡単なものから作りましょう。言語処理の基本は、よくわかりませんが(笑) 解析と実行。これだけかも。コンパイラになると、アセンブラなリストに変換したり、直接実行コードをはき出したりします。
プログラム・リスト図を書くのが面倒だ・・・。
インタプリタで実行 コンパイラ/アセンブラ
実行ファイル
実行
で、今回の目標は、コンパイラを作るべくして、テスト環境でインタプリタを作りましょう。
開発言語は何でもかまいません。 途中では、BASICで例を出したり、Cで例を出したりするかもしれません。JavaやC++は、使わないほうがいいですね。(オブジェクト指向を意識しすぎてしまうので・・・)
まず画面構成、言語作りをよくするゲームはやはりアドベンチャーゲームですね。(笑) メッセージ中に制御コードを埋め込んだり、よくやります。
言語が固まると、その上に高級な機能を追加して行きます。固まらないうちは、簡単な機能だけにしておきましょう。
プログラムには、スタート箇所があります。Javaアプレットなどのイベント駆動型のプログラムには、あるように見えてないようにも見えますが、これは今回の対象外。でもその中にもスタート箇所はありますね。
変数は知ってのとおり。
スタックを知るか。
ついでにCPUのPCとかEIPとか。
ゲームの話はどこへ行った・・・。
update 2001.1.2
反応がない・・・・。2001.4.14
設計することからはじめてみます。
Java言語などのオブジェクト指向言語は、高度な抽象化ができる反面、初心者には多少扱いにくいようです。
Perlや昔のBASICなどは、オブジェクトのことを考えられていなかったので、ちょっと大変だったかもしれません。
うにょ。
とりあえずツールを作るためのツールを作るためのツールぐらいから作らないといけませんな・・・。
まずは、バイナリエディタです。どの環境で動くバイナリエディタがいいか?
Windows で動くものは、Bz などがおすすめです。Vectorにあります。
Linuxで動くものは hi などがあるようですが、作ってみてもいいですね。どちらでも動くものを作るとなると、軽くなくてはいけないのでJavaよりCがいいかなとかいうことになってしまいます・・・。
まぁ、最終的な言語ができれば、その上でまたバイナリエディタを作りましょう(笑)ん~、最近いろんなところが分散しすぎてますが、普段使うツールって最小限にしたほうがいいですね。
アイデア構築プロセッサとか使ってますけど、アイデアまとめるのはHTMLで書きためるとかのほうが私は楽です。
で、書いたものがそのままここで公開されてます。(笑)
まぁ、自分がいちばん筆としてつかいやすいのはどのソフトかをなんとなく今考えたら、アイデア構築ソフトより秀丸よりNetscape Composerでしたと。そんだけです。紙と鉛筆が、絵も描けてほんとはいいんですけどね。Wordとか重すぎて複雑すぎて論外です。使い方考えてるうちに何を書こうとしてたんだか忘れてしまいますから。
でも、こういろいろあるとバグジラもまとめるのにはいいかも・・・ってもぅ、どうしようもないですね。ツール使いすぎ。
で、やることがあっちこっちとっちらかってますが、どうしましょ。
各所各所に案内番号なんてつけてみてもいいんですが、たぶん途中であきらめてしまいますからやめときましょう。やりたいことが多すぎるのも困りものですね。はぅ。基本は入力ありき、それを加工して出力することです。
言語は、プログラムを入力し、実行結果を出力します。
プログラムは、データを入力し、加工されたデータを出力します。
なんとも基本的すぎることですね。どのような区切りで入力するか決めましょう。
C言語やJavaなら、; でコマンドを区切って読み込み実行します。
BASICなんかは、F-BASICですけど、 1行単位で 読み込み、 : で区切って実行します。
他に私が触ったことがあるのは、モップさんが作られた通信ソフトMopTermのスクリプトでしょうか。
これは、ちょっち癖があったかもしれませんが、基本的な作りはしっかりしてますね。今回は、他の言語に似たようなのでいいですね。
{ } で区切ることができて、 その前に名前をつけられる。
オブジェクト構造は取り入れましょうか。あとで拡張するか作り直すかでいいですね。今回は練習(笑)
[しいしせねっと]