字句解析プログラム生成器とでも呼べばいいのだろうか。なんか使えそうなのを発見したのでメモ書きです。
字句解析ルールを簡単に記述するだけでそれを満足するコードを出力してくれるとても賢い子です。cで使えます。
test environment
$ uname -a Linux ubuntu 4.4.0-87-generic #110-Ubuntu SMP Tue Jul 18 12:55:35 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
requirement
$ sudo apt install flex
example
hoge という文字列の個数を数えます。
count.c
#include<stdio.h> extern int hoge_count; extern int yylex(void); int main(int argc, char **argv){ yylex(); printf("%d\n", hoge_count); return 0; }
lexer.l
int hoge_count = 0; %% hoge hoge_count++; . \n
Makefile
count: count.o lexer.o -lfl gcc count.o lexer.o -lfl -ocount count.o: count.c gcc -c count.c lexer.o: lexer.c gcc -c lexer .c lexer.c: lexer.l flex -t lexer.l > lexer.c
後はビルドして入力を食べさせると hoge の出てくる回数をはくことが確認できます。
flexで記述した字句解析は yylex() という関数をたたくことで呼び出しが可能らしい。
Makefile無駄が多くてごめんなさい勉強中なんです。
ラップしてpythonとかrustとかで使えそうですよねってかもうありそう。