Presentation is loading. Please wait.

Presentation is loading. Please wait.

ISD実習E 2009年6月1日 read関数 read-macro back-quote 文字列のread 課題

Similar presentations


Presentation on theme: "ISD実習E 2009年6月1日 read関数 read-macro back-quote 文字列のread 課題"— Presentation transcript:

1 ISD実習E 2009年6月1日 read関数 read-macro back-quote 文字列のread 課題
LISPシステム入門 (第3回) read関数 read-macro back-quote 文字列のread 課題

2 read関数 V0.3 read関数なし V0.4 symbol, 数のみのread関数 V0.5 リスト構造のread
V ' (quote ) #t,#f read_tで、文字がアルファベット、数字、 マクロ文字 (,) “, . , # のどれかを定義する。 マクロ文字の場合は、その処理のための関数を呼ぶ。 リスト構造を読むために、関数list-readが file_readを再帰的に呼び出すことに注意。

3 quote read-macro a_quoteはmain.cで定義 symbol.cのmake_symbolをcall
ptr quote_read(FILE *in){ ptr p,s; p=file_read(in); s=cons(p,NIL); return cons(a_quote,s); } a_quoteはmain.cで定義 symbol.cのmake_symbolをcall lisp.hにも記述がある。

4 back-quote macro `s をreadすると (back-quote s) を返すようにする。 たとえば `(a b) は
(back-quote (a b)) である。

5 back-quoteを作る a_back_quote をlisp.hに追加 main.c を修正
read.c にback_quote_readを作る。 make ./es により確認

6 文字列 “abc” をreadすると,文字列データを返すように する。 symbol.c を cp symbol.c string.c
とコピーして、それを編集して make_stringを作ろう。(lisp.hも見る)

7 Makefile.am string.cをシステムに追加するため Makefile.am を修正する。その後以下を実行 autoconf
automake -a ./configure make ./es

8 文字列のプリント print.c を変更して文字列のプリントができるように 変更する。ただし、文字列は” で囲んで画面に表示 する。
STRINGP はlisp.hで定義されている。 print.cの中に print_string(ptr x) を作り、関数 ptr print (ptr x) の条件分岐を追加する。

9 make_stringのcheck ここまでできたら、main関数から make_string と、それをprintする命令を書いて
により実行してみる。

10 文字列をread read.c において、文字列 の先頭 ”がマクロであることは、定義されているが その関数は定義されていない。
これを修正して、 string_read を作って呼び出すようにしなさい。 ただし、簡単のために、次に”が現れるまでを 文字列とする。また、文字列の大きさは128byte 以下として良い。

11 課題 セミコロン ; 以下を注釈とするようにしなさい。 つまり、; をマクロ文字として
セミコロン ; 以下を注釈とするようにしなさい。 つまり、; をマクロ文字として それが現れたら、行末までをすべて無視するように、 read.c を変更しなさい。マクロ関数の名前は、 read_comment とします。 たとえば “abc;def” ;this is string と入力すると文字列 “abc;def”は読み込まれるが ;this is string は無視される。 期限: 6月12日5時まで、作成したread.cをプリントして レポートにする。


Download ppt "ISD実習E 2009年6月1日 read関数 read-macro back-quote 文字列のread 課題"

Similar presentations


Ads by Google