ParsingExpressionGrammer を試す

いつしか作ろうと思って放置していたオレオレ記法のパーサーを作るために、Rui:ParsingExpressionGrammarを試す。

いろいろ試しているけど、すぐにループに陥ってしまったり、思いどおりの文字列を掴まえられなかったり。EBNFも構文解析もまともに勉強したことないから、そこらへんの基礎知識をつけたほうがいいのかなぁ。あとは、ドキュメントが見あたらないので使いこなすためにはソースを読まないと。

$char, $string

char, string からパーサ(クロージャ)を生成するだけ。

$many

($many <exp>)

が表わす文字が複数個並んでいる文字列にマッチする。貪欲なマッチなのかな?

$manyを使うとよく無限ループになる。

$do

捉えた文字列そのものではなく、それを加工したり別のものに置き換えたりするときに使う?

; hogehoge -> hagehage
gosh> (parse-string ($many ($do (txt ($string "hoge"))
				($return "hage")))
		    "hogehoge")
(#0="hage" #0#)