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

Google RE2の前の実験的実装としてRE1があります。VMを使った正規表現エンジンの勉強に最適だと思います。ここではRE1実装ができるまでの実装を細かく追っていくことを目的に再開発します。blogで解説したいと思っているのですが、どうかけば良いか考え中です。リポジトリこちら(github.com)にあります。ここまで来ると、main関数が動きますので、ここからのほうが動かせるので読みやすいかもしれません。

使い方


まず、次のようにすればビルドできます。

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

'./nfa 正規表現 文字列1 文字列2..'とすると、はじめに正規表現バイトコードが表示されてから、マッチする文字列だけ書きだしてくれます。例として'./nfa "P(ython|erl)" PHP Ruby Python Perl'とすると次のように出力されます。

0. char P
1. save [2]
2. split 3, 9
3. char y
4. char t
5. char h
6. char o
7. char n
8. jmp 12
9. char e
10. char r
11. char l
12. save [3]
13. match
match:Python
match:Perl