Lately I've been using the Parsec library for Haskell to write a parser and interpreter for a university assignment. Right-recursive grammars are trivial to parse with combinatorial parsers; tail recursion and backtracking make this simple. However, implementing a left-recursive grammar will often result in an infinite loop, as is the case in Parsec when using basic parsers. Parsec does support le
パーサライブラリの現状 Haskellではパーサライブラリは様々なところで使用されています.例えば,Haskellでのデファクト的なJSONパーサライブラリaesonは,JSONデータのパースにattoparsecというライブラリを使用しています.GHCはHaskellプログラムのパースにalex/happyというレクサーとパーサを利用しています.HTTPライブラリでは,parsecを軽量パーサとして使っています.このライブラリでは,WWW-AuthenticateヘッダやSet-Cookieヘッダの内容をparsecでパースしています. このようにパーサライブラリは非常に需要が高く(文字列をパースするというのは,日常的に出くわす状況ですからね),Haskellでは様々なパーサライブラリが存在します.この記事ではそれらのパーサライブラリの簡単なまとめ と比較 を行います. さて多くの数があ
YACC の shift/reduce, reduce/reduce conflict の解消はパーサーの教科書もしくはネット情報に沢山書かれているます。まず、YACC の基本動作原理とともにそれなりに理解してください。たとえば http://guppy.eng.kagawa-u.ac.jp/2006/ProgLang/bison-1.2.8/bison-ja_8.html など。 どの教科書にもありますが、だいたい、 ルールが大雑把過ぎるのが原因であることが多いので、ジェネレータが conflict で迷わないようになるまでルールを書き下す。 トークンの優先順位と結合方向を指定することで適用可能なルールの数を減らす reduce/reduce は解消したほうがよい shift/reduce の場合は shift 優先なので、それで満足ならほっておく (ただしあなたの YACC 経験値は上
概要 パーサとスキャナ プログラム言語のパーサの書きかたは昔からしつこく研究されてきており、 かなりしっかりした定石がある。よほど変な(または曖昧な)文法でない 限り、定石にのっていけば解決できるものだ。 まず最底辺には文字列を単語(トークンとも言う)の列に切り出す部 分がある。これをスキャナ(scanner)とかレクサ(lexer)と言 う。日本語で言うと字句解析器だが、言いにくいのでスキャナと呼ぼう。 スキャナというものが出てくる根底にはそもそも「単語の区切りには空白ある でしょ」という常識がある。そして実際にたいていのプログラミング 言語はそういう仕様になっている。そのほうが楽だからだ。 例えば古いFortranでは空白が意味を持たなかった。つまり空白を入れても 単語区切りとは限らないし、変数の途中で何の前触れもなく空白を挿入したり することもできた。ところが解析が恐ろしく面倒なもの
Preface The full source code for the examples can be downloaded from Github This is a work-in-progress. Please send your comments and bug reports to jyotirmoy@jyotirmoy.net. Cover image Leafy seadragon. Image by user lecates’ on Flickr. Used under the terms of the CC BY-SA 2.0 license. The artwork for the cover page is released under a newer version of the same license and is included in the Githu
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く