関数型言語の勉強に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分で書けた!感動した。


※「SICPを読もう」の目次はこちら


計算機プログラムの構造と解釈
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン 和田 英一
ピアソンエデュケーション (2000/02)
売り上げランキング: 56,404