関数型言語の勉強にSICPを読もう - (57) 4章 - 超言語的抽象 - 小休止 - 字句解析を書く
持ち時間のもう1時間は字句解析の勉強にあてる。
Schemeの入力に対してどのような token を定義すればよいか分からないんだけど想像で以下のようにしてみる。
token
enum { IDENTIFIER, STRING, NUMBER, LEFT_PAREN, RIIGHT_PAREN, QUOTE, };
字句解析
まずはさらっと書いて、実行してみる。
これを入力すると
(define (stream-ref s n) (if (= n 0) (begin (display "hoge")(stream-car s)) (begin (display "zzzz")(stream-ref (stream-cdr s) (- n 1)))))
こんなのが表示される
[LEFT_PAREN] [IDENTIFIER: define] [LEFT_PAREN] [IDENTIFIER: stream-ref] [IDENTIFIER: s] [IDENTIFIER: n] [RIGHT_PAREN] [LEFT_PAREN] [IDENTIFIER: if] [LEFT_PAREN] [IDENTIFIER: =] [IDENTIFIER: n] [NUMBER: 0] [RIGHT_PAREN] [LEFT_PAREN] [IDENTIFIER: begin] [LEFT_PAREN] [IDENTIFIER: display] [STRING: hoge] [RIGHT_PAREN] [LEFT_PAREN] [IDENTIFIER: stream-car] [IDENTIFIER: s] [RIGHT_PAREN] [RIGHT_PAREN] [LEFT_PAREN] [IDENTIFIER: begin] [LEFT_PAREN] [IDENTIFIER: display] [STRING: zzzz] [RIGHT_PAREN] [LEFT_PAREN] [IDENTIFIER: stream-ref] [LEFT_PAREN] [IDENTIFIER: stream-cdr] [IDENTIFIER: s] [RIGHT_PAREN] [LEFT_PAREN] [IDENTIFIER: -] [IDENTIFIER: n] [NUMBER: 1] [RIGHT_PAREN] [RIGHT_PAREN] [RIGHT_PAREN] [RIGHT_PAREN] [RIGHT_PAREN]
ktkr!!!。20分で書けた!感動した。
計算機プログラムの構造と解釈
posted with amazlet on 06.05.31