Scheme:パーザジェネレータ

Scheme:パーザジェネレータ

Scheme:LazyEvaluation で出た話題:

横槍の横槍ですみません。macroの話題がでてきたところで便乗して...ひとつ、 質問させて下さい。 普段は、lua使いなので、schemeについてはいまひとつ? なのですが、正規表現を使える macro の処理系というのは存在しないのでしょうか?  あそこまで強力にするのであれば、lexer並の機能を期待してしまうのは自然な ことだと思うのですが。ちなみにgemaのような仕様 をscheme風に整理したものを 想像しています。 あっ”Scheme:マクロの効用”の方に書くべきだったか。--toki?

に関して議論を進めるコーナー。


LispのマクロはあくまでS式からS式へのトランスレータなので、 入力コードもS式としてパーズ可能であることを前提としています。 もし、例えばコードをinfixで書いておいてそれをLispプログラムとして 読みたいとなると、lexerの部分を拡張しなければなりませんが、 その標準的な方法はSchemeにはありません。(Common Lispだと入力文字に 対して処理手続きを付けるという形でカスタマイズが可能ですが)。

ただ、そこまでしてしまうとマクロ処理というよりは自分で言語を 作ってしまっているようなことになりますね。結局、Paul Grahamも 言及しているように、Lispのマクロが簡単に強力な処理ができるのは、 コード自体がS式で書かれているという事実に負うところが大きいと思います。

個人的には、parser/lexer的なものを書く機会が多いので、 そのへんも手軽に処理できるフレームワークがあるといいなと思っては いるのですが… --Shiro (2002/05/19 03:29:02 PDT)


私も、基本的には制御屋なのですが、時代の流れをうけてかpacketのような serial dataを構文解析する機会が非常に増えてきました。 とくにhtmlのようなrecursiveに処理になければならない構造をもつdataを 扱わなければならない場面が度々あるんですよね。このような場合、flexをはじめ とする既存のlexical analyzerでは今ひとつ煩雑ですし、dfaによる正規表現の実装では 完全にstaticになりますから、柔軟性に欠けます。 この状況は、もとよりflex以下の機能しかもたないsilexなどのschemeによる実装でも 変わらないようです。 でs式の処理に特化したschemeのmacroで何か実験的な試みがないかなと。 現状では、gemaをluaに組み込んで使っているんですが、日本語が... 汎用のmacro言語の研究って、m4以降あまり活発ではないんですよね。 言語ではなく、pcreでもhogeったらという声が聞こえてきそうですが。 --toki?


どもども。いやparser generatorがあればかなり救われるんです。 ただ、使い易いparser generatorの処理系ってないんですよね。 大抵;

でもdebugは、genaratorが機械的に吐き出したperformance優先の分り難いcodeが相手。 ちょっとメげます。せっかくinterpreter使ってrapid programmingしてるのに。 どうも、世の中のparser設計者はparser generatorというとcode generationしないといけないと 思っているようなんですね。でもlexer部分は基本的にはregular expressionで、 こちらは既にlibraryが存在する(GPLでよければrxとか)。 parser部分も定型処理がほとんどで、library化も機械的な作業で可能でしょうし、 performanceも変わらないのではないかと。 でも存在しないんですね、open sourceのparser generatorのinterpreter(library)。

      http://www.inf.bme.hu/~pts/flex_rb-latest.tar.gz


こんなのありました。on-the-flyでコンパイルしてくれます。 Essence, an LR parser generator for Scheme --Shiro (2002/05/21 14:06:45 PDT)


ところで、Gaucheのmacro適用部分は、展開された形でdebugするようになるのでしょうか。 それとも、元のままdebug可能になるんですか? --toki? ネストを元に戻すにはどしたらいいんだらふ。


Tag: Macro

More ...