もう一品追加
家かえるまでが言語開発合宿 なので,帰るまでにもう1つ作った.ってこれも言語じゃなくてパーサだ
実行例
>java parse.Parser (ab (cd de) ef )|?SINGLETON-2:19 〔'(' 〔〔〔〔'' 'ab'〕 〔'(' 〔〔〔'' 'cd'〕 'de'〕 ')'〕〕〕 'ef'〕 ')'〕〕
これは,
S -> e | S A
というような左結合の言語をパースするもの.(e は空文字列に一致)
S の解析結果として考えられるものすべて := [ 空 :: S A の解析結果]
という式をたてて,右辺を遅延評価する,という仕組みをJavaで作ってしまった.
これのヒントになったのは,フィボナッチ数列を無限リストで解くプログラム
fibonacci = 1:1:zipWith (+) fibonacci (tail fibonacci)
からヒントを得たもの.ちなみにこのプログラムもJavaに直したものを同梱してある.
>java fib.FList 2 3 5 8 略