>> On Tue, 30 May 1995 19:41:00 +0900, 磯山 卓志 <GGG03556@niftyserve.or.jp> said:
> 磯山です。
>>> scheme というと、Common Lisp の Guy Steel Jr. と G.J.Sussman の作った
>>> 言語ですね。Common Lisp に比べるとかなり仕様は小さいですが、やっぱり
>>> Lisp ですので、Boot に使う言語としては無理があるような気がします。
> そうですね。中身が完全なLispマシンならばともかく。
> 「Lispでbootする」って宣伝すると、Lisper達がB-Free OSに興味もってくれるかも
> という、スケベな下心から書いてみました。:-)
。。。good idea かもしれない。。。
# ところで、日本の Lisper ってどのくらい残っているんでしょうか? :-P
# 絶滅寸前だったりして :-)
> SUNがforth系だというのならば、forth系でやってみましょうか。
> こんな感じなのかしら。
> %ITRONが入っているパスの指定
> /ITRON-PATH "/itron.img" def
> %指定したデバイスからプログラムを読み込み、実行を開始する
> /load-and-fly
> dup pop
> {
> read-program-header
> get-load-addr
> load-program-body
> run
> {
> "Cannot run program" print
> } if
> }
> {
> "Cannot open file" print
> } ifelse
> def
> として、
boot> ITRON-PATH "fd0" load-and-fly
> ※PostScriptもどき
残念ながら、PostScript はほとんど知らないのですが、次のような感じの文
法と考えていいのでしょうか?
'/'ではじまる単語はシンボル。
".." で囲んだ文は、文字列。
それ以外の文字は、予約語(関数)。
{ ... } で囲んだ文は、ひと固まりの処理を表現する。
予約語以外のシンボル、文字列が来たときにはスタックへ積む。
{ ... } で囲んだ文はそれをひとかたまりとして、スタックへ積む。
(中身は実行しない)。
構文解析の処理は、次のようになるのかな?
parser ()
{
TOKEN token;
for (;;)
{
token = read_token (); /* トークンの読み込み */
if ((トークンが文字列) || (トークンが数値))
{
token をスタックへ積む。
}
else if (トークンがシンボル)
{
シンボルテーブルに登録。
シンボルをスタックに積む。
}
else if (トークンは予約語(関数))
{
トークンを実行。
}
else if (トークンが '{')
{
非実行モードで '}' までのトークンを読み込み、
ひとかたまりのブロックを作成し、スタックに積む。
}
else
{
エラー :-P
}
} /* End of while */
}
確かに、forth (風) に逆ポーランド記法で書くと構文解析は単純そうですね。
-- 内藤隆一 (ggc00661@niftyserve.or.jp/night@bfree.rim.or.jp)