みどりねこ日記

よくわからないけど、頑張りますよ。

パーサ

Pythonを呼べるLispを作った話

この記事はLisp Advent Calendar 2016 5日目の記事です。 Futhonとは Futhonとは、Pythonが呼べるLispである。 先日作ってみた。 読み方は「ふとん」である。 本記事は、Futhonの内部実装がどうなっているかを簡単に説明する。 すごく小さな実装(ソースコー…

instaparseで遊ぶ

この記事はClojure Advent Calendar 2013 - Qiita [キータ]19日目の記事です。 instaparse 本記事ではinstaparseというライブラリを使って遊んでみます。 instaparseはEBNFやABNFで記述された文脈自由文法から自動的にパーサを生成してくれます。 左再帰、…

パーサの連接とか

前回までに出てきた基本的なパーサをくっつけることで複雑なパーサが書けるわけですが、 今回はそのような連接とかを手助けしてくれるパーサコンビネータを紹介?します。 Kern のパーサコンビネータはシーケンス化、反復、選択、それと括弧の対応とかの面倒…

数字のパース

kern にはいくつか数値のパーサが用意されてて、これらは結果として文字列ではなく適切な数値型を返します。これらのパーサは名前空間 lexer 内のそれらに比べてサポートする数値型は少ないし、空白とかコメントとかもスキップしません。つまるところ、大き…

Kern のプリミティブパーサ

Kern にもプリミティブなパーサがあって、これらを組み合わせていくことで大きなパーサを作るというのが関数型らしいパーサの作り方なわけですが。 それらをちょっと見ていきます。 Kern けっこうかわいいわあ。 (use 'blancas.kern.core) return は常に成功…

Clojure の パーサコンビネータライブラリ Kern

Clojure でパースするとき、みんなどうしてるんだろう。 Parsec のようなものがあればいいのに〜、と思って探してみたところ、この Kern が一番よさげだった。 特徴 状態モナドベースのコンビネータ群 C, Java, Haskell, Shell の構文をサポート パースと式…