SSブログ

オリジナル言語 題してT言語の現状 [IT]

先日紹介したオリジナル言語についてです。
名前はズバリ「T言語」です。タナーのTですw
いつかT++とかT#に進化したらいいなぁw

さて、言語仕様は大体決まりました。
というか現時点ではこれ以上思いつかない。
実際に使っていくうちに改善点も出てくるだろうから、徐々に改善していきましょう。

仕様が決まったので、次はコンパイラをどう実装するかを検討します。
コンパイラは大きく分けて以下の機能に分けられます。
字句解析
入力した文書から字句(コマンドや変数、演算子など)を切り出す
構文解析
切り出した字句を構文として解釈する
中間コード作成
構文をコード生成しやすいように一度命令文に置き換える
コード最適化
置き換えた命令文が最適になるように改良する
コード生成
命令文を実行コードやレジスタの使用方法を決めて実行オブジェクトに変換する

この中で字句解析は何となく自分の中で解法がありますし、まあ力技で何とかなると思っています。
構文解析は言語仕様の決定の際にざっくりと方針を決めたので、それに沿うように解析ロジックを組もうと思います。ここはそれなりに手間がかかると思います。
中間コードについては今の所保留にしてます。構文解析と一体化できるかもしれないので。
コード最適化はとりあえず当面は考えなくていいと思います。
で、一番難問なのが最後のコード生成。
そもそもZ80のコードを全部把握しなければならないし、以下にあげるポイントの解法がまだ見いだせていません。

文字列変数の扱い
文字列変数を定義する時にリニアにメモリ確保して、以後はアドレスの受け渡しだけで扱うのか。
例えば変数の代入をした時にシャローとディープの使い分けをどうすべきなのか。

IOCS制御の実装方法
IOCSはX1の共通I/Oルーチンだが、レジスタやアドレスのダイレクト設定が必要。
IOCSを呼び出す度に使用するレジスタを退避して値を代入する操作をしていたのでは効率が悪い。
全体的なレジスタの使い方と合わせて検討が必要である。

グラフィック関連の実装方法
X1のグラフィックRAMはI/O空間にあるため、必ずBCレジスタを使わなければならない。
これもIOCS同様にレジスタ運用の制約となってしまうので、検討が必要。

イレギュラー動作に対する対処
最新鋭言語では例外ハンドリングが当たり前のように出来るし、仮にハンドリング出来なくてもフレームワークがカバーしてくれる。
しかしT言語の場合、イレギュラーは即暴走につながる。
例えばmain処理で無限ループになるように作らなければどこかでプログラムは終了してしまう。
その時どう動作させるべきなのか。

とまぁ考えなければならないことはたくさんあります。
独自解釈で考えちゃってもいいんだけど、もう少しこの分野の勉強が必要かもしれないなぁ。
nice!(0)  コメント(0) 

オリジナルの開発言語を作ろう! [IT]

最近、WithCycleは頻繁に更新しているのだけど、こちらは停滞気味ですね。
何気ない日常のこととか将来の野望とかしたためても良いのですが、自分の中でそれほど盛り上がらないので手を出しません。
今は大きな環境変化の直前なので、あまり大波を立てて溺れてしまわないようにおとなしくしていようと思います。
しばらくしたら色々ご報告できると思いますよ!
(別に楽しい話題ではありませんが)

さて、だいぶ前にご紹介した愛機シャープX1なんですが、もうしばらく電源を入れていません。
x1d_1.jpg
windowsで動くエミュレータがあるので、ちょっと触って見たい時にはついそちらを使ってしまいます。
でも実機でやって見たいことは色々あるんですよ。
それにはソフトを作らないと行けないのですが、もはやX1でプログラムを作る気力はありません。
今時と比較したら環境は劣悪の一言です。
どうせならWindowsやMac上で開発して、完成したものをX1に転送したい。
いわゆるクロス開発というやつです。
その場合、開発言語はどうしたものか。
今更アセンブラなんて時間ばっかりかかるのでやりたくない。
かといって昔のBASICなんて遅いしフリーエリアがないので使い物にならない。
今時のC#やJavaでやれれば最高だけど、それをZ80のバイナリにコンパイルするなんてどこを探してもないだろうし、そもそも大きすぎてX1に乗るわけない。

となれば、自分だけのオリジナル言語を作るしかないでしょう!
と思い立ち、現在言語仕様を策定中です。
今のところC言語ライクで、やろうと思えば(X1で動かす程度なら)何でも作れちゃいそうな感じになっています。
というか、基本的にややこしそうなところを全部拡張モジュールに出してしまうという先送り思考なのですがw

言語を作るなんて本当に久しぶりです。
昔音楽演奏用の言語(music macro language MMLと言います)をいくつか作りました。
これはリアルタイム演奏するためにインタープリタ型で作ったのですが、今回はコンパイラ型にしようと思っています。
構文解析とかメモリ管理などはノウハウを生かせますが、実行体を作成するところは未知の世界です。
色々勉強しなければなりませんが、こういうトライは得難い貴重な経験が出来るので何としても完遂したいですね。
そしてその言語で何か面白いソフトを作ってみたいなと思っています。
高校生の頃作りたかったけど挫折したプロジェクトもあるので、復活させて世に出せたら最高だなぁ。
nice!(0)  コメント(0) 

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。