kmizuの日記

プログラミングや形式言語に関係のあることを書いたり書かなかったり。

2009-02-01から1ヶ月間の記事一覧

Cで作るPEGパーザコンビネータ

これまでPEGパーザコンビネータ作ってきた言語は、全て、レキシカルスコープの無名関数やそれに類似の機能を持っていたため、容易に作ることができましたが、C言語には無名関数のような機能が無いため、ちょっと頭をひねりました。とりあえず作ることを優先…

C#で作るPEGパーザコンビネータ

id:tad0さんのコメント: C#版きぼんぬ http://d.hatena.ne.jp/kmizushima/20090226/1235619468#c1235739906 ということで、C#版も書いてみました。C#については時々調べたりするものの、ほとんど全くと言っていいほど使っていないので(たとえば、今回、C# 3…

Onionのバグ修正

module宣言を使ったとき、たとえば、 module foo.bar; class A { @b: B; } class B {}みたいなときに、@b: BのB型が見つからないというコンパイルエラーが出ていたのを修正。Onionを自分でもっとまともに使ってたらとっくに気付いてたバグだなあ。module宣言…

Scalaで作るPackrat Parserコンビネータ

【急募】PEGパーサのメモ化の実装 http://twitter.com/anatoo/status/1253132392 とかあったんで、せっかくなのでサクっと実装してみた。 ポイントは、PEGパーサコンビネータでは、ParserがString => Option[(A, String)]を継承していたのを、Int => Option[…

Onionで作るPEGパーザコンビネータ

せっかくなので、OnionでもPEGパーザコンビネータ書いてみた。しかし、自分で作った言語なのに、文法忘れてて文法定義ファイル見直してみたり、コンパイラが例外吐いて落ちたりして、コンパイラの不具合を避けてプログラムを書くために頭を悩ませるはめに…。…

Rubyで作るPEGパーザコンビネータ

調子に乗ってRubyでもPEGパーザコンビネータ書いてみた。Rubyは素人(コード自動生成とかにしか使ってない)なので、もうちょっとこうした方がいいよ、とか、こうした方がRubyっぽいよ、とかあったら教えてください。 module PEGParserCombinator class Parser…

Scalaで作るPEGパーザコンビネータ

といっても、昨日Javaで作ったPEGパーザコンビネータライブラリをScalaで書き直しただけのものだけど。Java版に比べて、1/3くらいの行数になっている。 object PEGParserCombinator { abstract class Parser[+A] extends (String => Option[(A, String)]) { …

Onionのバグ修正その2

abstract classでabstractなメソッド宣言があったとき、例えば、 abstract class A { public: def foo; }のとき、コンパイラがNullPointerExceptionを吐いて落ちていた問題を修正. (interfaceのメソッド宣言では起きていない)。クラスのabstractなメソッドに…

Javaで作るPEGパーザコンビネータ

パーサジェネレータを作る簡単さで言うと、 PEG http://twitter.com/kmizu/statuses/1183248403 なんて偉そうなこと書いたので、(パーザジェネレータじゃないけど)PEGパーザコンビネータを実際にJavaで書いてみた。文字クラスを除くPEGの機能のほぼフルセッ…