正規表現エンジン(RE1)への道(2)

re1を読むために作ったプロジェクトregexp_vm(d58ae...)に(RE1の)pikevmを追加しました。ビルドは次のようにすると、reという実行ファイルができあがります。


git git@github.com:nnabeyang/regexp_vm.git regexp_vm
cd regexp_vm
make

使い方もvmを指定するように変更しました。"./re <仮想マシン> <正規表現> <文字列>+"です。例を上げると'./re pike "(.+)world" helloworld theworld'とすると、次のように出力されます。

0. save [2]
1. any
2. split 1, 3
3. save [3]
4.
9. match
match:helloworld
$1=hello:[0,5]
match:theworld
$1=the:[0,3]

出力を見ると分かるとおり、括弧で挟んだ部分の文字列と位置が表示されるようになりました(サブマッチングですね)。あとはバイトコードでCharが続く部分は一行で"アドレスの先頭. <文字列>"と表示するように変更しました。(re1のthompson.cとpike.cを読むのに役立てばと思いますが、バグも多いですし、re1自体のバグもかなりあると思います。)