flexで遊ぶ。

今日も浅く広く。浅広。

なんとも楽しげなツールがある。その名もflex/bison。なんと、自作言語を作れちゃうのだ。聞いたことはあったけど、使ったことは無い。

さて、事始めにlexを試します。lexは字句解析担当です。受け取ったデータをトークン(字句)に分けると。

hello.l
%{
#include <stdio.h>
%}

%%
[0-9]+		printf("[NUMBER]");
[a-zA-Z]+	printf("[WORD]");
%%

%{ 〜 %}までにC言語の宣言部分を書いて。%%〜%%までに字句解析を入れると。ふむふむ。

Makefile

コンパイルが面倒なので、Makefileを適当に書く。

all :
	flex hello.l
	cc lex.yy.c -o hello -lfl

flexで、lex.yy.cを吐いて、gccコンパイル。-lflを付けないと怒られる。

後は実行するだけ。
$ make
$ ./hello
Hello, lex world!!
[WORD], [WORD] [WORD]!!
123 + 456 + 789
[NUMBER] + [NUMBER] + [NUMBER]

見事に分割されてます。しかも、驚く程簡単に。電卓でも作って遊ぶかな。

参考:Lex and YACC primer/HOWTO