自作言語 on 自作os +α
この記事は自作OS Advent Calendar 2017 - Adventarの22日目の記事です。
タイトルからお察しの通り、予定されていた「真acpi入門」は死亡しました。能力不足です。。
hariboteOSしか作った事無いのに背伸びし過ぎましたね。。僕は何も分かってない事が分かりました。
また今度リベンジしたいです。
ということで、「自作言語 on 自作os」 を書いていきたいと思いまつ!
間違っていたら指摘お願いします;;
自作言語とは
流れ
ファイル等から文字を読み取る
↓
字句解析と構文解析、つまり特定のフレーズに反応して処理を行う。
(追記)
ご指摘を受けたので追記します。
字句解析は単語を分解すること、構文解析は単語の並びを解析すること。
「字句解析→フレーズに反応して処理を行う」は間違っていました。
「字句解析+構文解析→フレーズに反応して処理を行う」が正しいと思います。
この言語ではその処理を一緒に行っているので違いが分かっていなかったです。
(追記終わり)
多分基本はこうなんじゃないかなぁ、と思います。コンパイラ、オブジェクト指向、最適化、型推論、とか色々発展はあると思いますが。
つまりOS自作入門(30日本)の30日目のcalcアプリケーションと同じ感じなんですよね。
そう、アプリケーションなんです。よって別に自作OS上だからといって特別なことは何もなく、普段使いのPCで動く自作言語がほぼそのまま移植できます。(I/Oの違い等によるライブラリの差はある)
「自作言語 on 自作 OS 」というフレーズはカッコイイんですけどね、、
という事で、四則演算と標準出力しか実装が終わってない僕の自作言語から提供できる話はございません!!
(一応ソースはここ!)
zuvizudar-os/app/zuv at master · zuvizudar/zuvizudar-os · GitHub
fh=api_fopen(p); //ファイルを開く ~ api_fread(&c,1,fh) //cにfhから1文字入れる(文字を読み取る) ~ if(strncmp(p,"print",5)==0) //文字列と一致したら処理!
ふぅ、タイトルを回収してしまいました。
ここで終わるのも寂しいので、「「自作言語 on 自作 OS 」の周辺」について書きたいと思います。
つまり、hariboteOSにおけるファイル書き込みAPIとエディタのお話です。
fwrite on hariboteOS
追加したAPIは3つ。
fopen_w,fclose_w,fwrite
やっていることはFAT12への書き込みです。
api_fopen_w(char *fname); :ファイルを開ける。
api_fwrite(char *buf, int maxsize, int fhandle); :bufをfhにコピー
api_fclose_w(int fhandle); :fhをclose&fatに保存。fatは空いている所を探す
zuvizudar-os/console.c at a615d487c1ca9c1878cb502ced59ecbfbe0fdfd4 · zuvizudar/zuvizudar-os · GitHub
vim
コンソールとtviewを組み合わせた様な感じです。
vim a.txt
保存出来ている事が確認できます
自作言語実行!
(これは誰がなんと言おうとvimなんだ、、)
(-s はソースを表示するオプションです。)
zuvizudar-os/app/vim at master · zuvizudar/zuvizudar-os · GitHub
あとがき
もう少し自作言語を凝りたかったんですが、acpiに時間を盗まれてしまいました。。