[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[bfree-prj 41] Re: Extension to Mitten (FORTH Modoki)



高田です。
B-Free ML とKernel MLに送っています。

B-Freeからソースのリンクと、ドキュメントを載せたいのですがよろしいでしょ
うか?

On Tue, 16 Feb 1999 15:55:28 +0900 (JST)
Tomohide Naniwa <naniwa@mechgw.mech.yamaguchi-u.ac.jp> wrote:

> はじめまして.浪花と申します.
> 
> 突然ですが,b-free-pc.0.0.40 の Mitten の追加コマンドの形で FORTH 
> もどきの言語の処理系を作りました.ソースを
>   http://scserv.mech.yamaguchi-u.ac.jp/~naniwa/comp/bfree/frtm-bf.tar.gz
> に置いてありますので,よろしかったらお試しください.
> 
> 以下は簡単ですが付属のドキュメントです.
> 
> ------
> 
> FoRTh Modoki for bfree
> ver 1.0.1  Feb. 16, 1999. by 浪花 智英 (naniwa@mechgw.mech.yamaguchi-u.ac.jp)
> 
> O. BFREE でのコンパイル
> 手順
> 1. kernel/BTRON/init/libMitten の下に *.c, *.h, frtm.patch をコピーす
>    るかシンボリック・リンクをはってください.
> 2. patch < frtm.patch として Makefile と commands.inc にパッチをあてます.
> 3. 普通に btron を作成してください.
> 4. frtm の起動は init> が出ているところで frtm と入力してください.
> 5. frtm を一時中断して init に戻るには quit と入力します.このとき frtm の
>    内部状態のクリアは行いません.
> 
> I. はじめに
> このプログラムは FORTH を模擬したソフトですが,完全に FORTH を再現した
> ものではありません.コンパイラは持ちませんが,ユーザー定義関数では定数
> や関数呼出しを定義時に解釈します.
> 
> 式の解釈は逆ポーランド記法に従って行われます.if による条件分岐.
> do-while, for-loop などのループのための構造文もあります.また,関数を
> 組み合わせて新たな関数を作ることもできます.
> 
> 現在のところ扱えるのは整数のみです.数字の入力は 10 進数または 16 進数
> (頭に 0x を付ける)で行えます.
> 
> frtm.h の中で各種スタックのサイズを定義しています.それぞれ,
> 
> #define STMAX 100    ; 数値計算用スタック
> #define DICMAX 50    ; ユーザー定義関数の最大数
> #define CSMAX 200    ; ユーザー定義関数の本体の記憶領域
> #define RSMAX 100    ; ユーザー定義関数実行用スタック
> #define SSMAX 20     ; ループなどの入れ子用スタック
> #define MAX_NAME 8    ; ユーザー定義関数名の最大文字数
> 
> となっています.適宜変更してください.
> 
> II. 関数
> □ 定義済関数
> .	10 進表示
> .h	16 進表示
> cr	改行
> sp	空白
> +	和
> -	差
> *	積
> /	商
> %	余り
> =	同値
> <	より小さい
> <=	以下
> >	より大きい
> >=	以上
> !	真偽反転
> 1+	1 加算
> 1-	1 減算
> 0=	0 と同値
> abs	絶対値
> max	最大
> min	最小
> dup	複製
> swap	交換
> drop	除去
> over	スタックの2番目の複製
> rot	スタックの上位3つを回転し,3番目をトップへ
> minus	符合変換
> spaces  複数個の空白
> help	関数名一覧
> quit	終了
> 
> □ 文字列の表示
> (Hello_World) echo
> スタックには
>     0 d l r o W _ o l l e H
> と入る.echo は 0 が現れるまで文字として順に表示.
> 
> III. プログラム構造
> □ 条件分岐
> <cond> if <block 1> endif
> <cond> if <block 1> else <block 2> endif
> 
> 仕様
> <cond> が 0 以外なら <block 1> を実行
> <cond> が 0 なら <block 2> を実行
> 
> 制限
> 
> else ブロックは複数書ける.
> 
> 例題
> 0 if 1 else 2 end if
> 
> □ do ループ
> do <block 1> <cond> while
> 
> 仕様
> <cond> が 0 であれば終了.0 以外なら do に戻って繰り返し.
> 
> 例題
> 1 do dup . cr 1 + dup 5 < while drop
> 1 do dup . 1 do dup . 1 + dup 5 < while cr drop  1  +  dup 4  <  while drop
> 
> □ for ループ
> <n1> <n2> for <block> loop
> <n1> <n2> for <block> <n3> +loop
> 
> 仕様
> <block> 終了後 n2 + 1(またはn3) を実行し,n1 より小さければ for に戻っ
> て繰り返し.
> 
> I リターンスタック上の n2 をスタックに追加
> 
> 制限
> n1, n2 は正の数とする.
> 
> 例題
> 5 0 for I . cr loop
> 10 0 for I . 5 1 for I . loop cr 2 +loop
> 
> □ コマンドの定義
> : name <block> ;
> 
> 仕様
> name を持つコマンドを作成する.
> 
> 制限
> do や for のループの中ではコマンドの登録はできない.
> 
> ユーザー辞書は新しく定義されたものから順に検索するため,再帰が可能になっ
> ています.また,関数を再定義されても古い関数のコードは残ります.
> 
> 例題
> : ave + 2 / ;
> 10 28 ave . cr
> 
> □ 辞書コマンド
> help  システム定義関数,ユーザー定義関数名一覧.
> 
> forget <name>
> <name> を持つコマンド以降にユーザーが定義したコマンドを全部消去する.
> 
> □ コマンドの探索
> コマンドはシステム辞書,ユーザー辞書の順に探索されます.ユーザー辞書は
> 新しく登録されたものから検索されます.
> 
> IV. ソースコードについて.
> 著作権は放棄しませんが,このコードの再配布,改変は自由に行っていただい
> て構いません.
> 
> コメント等がいただければはげみになります.
> 
> ---
> (putprop '浪花 智英
>     'affiliation  '(山口大学大学院 理工学研究科 環境共生工学専攻)
>     'e-mail	  '(naniwa@mechgw.mech.yamaguchi-u.ac.jp)
>     'URL  '(http://scserv.mech.yamaguchi-u.ac.jp/staff/naniwa.html))

_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
B-Free Project
 http://www.tron-net.gr.jp/B-Free/index.html
 http://www.sccs.chukyo-u.ac.jp/B-Free/index.html

高田光隆 (Mitsutaka Takada)
 mitsu.takada@nifty.ne.jp
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/