December 23, 2004mallocしない正規表現H8のようなマイコンで動く、mallocしない、つまり思わぬところからメモリを確保することのない正規表現ライブラリをこしらえてみました。動機はH8でもネットワークと直結できる今のご時世、HTTPのヘッダ解析すらマイコンでしなければならないわけですが、それをだらだらと書くのは鬱というものだろうということでがんばってみました。 特徴は、はじめにメモリをスタックから確保し、それ以上のメモリが必要になった場合はエラーをはいてとまるようにしてあります。つまり事前に試行実験をしておいてあらかじめメモリがどの程度必要か見極めさえすればそれ以上のメモリは要求されないので、マイコンなどのメモリが極端に少ないアプリケーションにはうってつけでないかと思います(逆にそこまでして正規表現使いたいかといわないでください…)。 ダウンロード・機能・使い方などは以下をどうぞ。 使える正規表現の記法ですが、Rubyの記法を採用していますが、機能は完全ではありません。今後機能を拡張する予定ですが、現在できることは
使い方はアーカイブ内のtest.cやコメントを参照してください。要約すると #include "reg_core.h"
regexp_t regexp; reg_precompile(regexp, NODE_MAX, SUBMATCH_MAX); if(reg_compile(®exp, "<a (?href|name)=\"([^\"]+)\">([^<]+)</a>")){ な感じです。NODE_MAXは遷移表のノードの最大数、SUBMATCH_MAXはバックリファレンスの最大個数、STACK_SIZEはマッチ時の使用メモリの大きさを決めています。 実装ですが、NFAな遷移表を作ってゴリゴリスタックでマッチさせています。 ちなみにこの正規表現ライブラリを使用・転載については今のところCreative Commonsのライセンスにおける『帰属 - 非営利 - 同一条件許諾』とします。条件にあるとおり改変は自由にやっていただいてけっこうですが、その成果なども教えていただけるとうれしい限りです。 とりあえず、これを使ってマイコンで動くXMLのSAXパーサでもこしらえるか、スクリプト言語でも実装するかを考えています。 コメント
>スクリプト言語でも コメントする
|
スポンサード リンク
|