もう一品追加

家かえるまでが言語開発合宿 なので,帰るまでにもう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
略