bisonではまる。

bisonになったら急激にレベルが上がったぞ〜!!そんなわけで浅く広く最小限でいく。浅広。

bisonで計算機!と行きたい所だが、イマイチ構文処理がわかってない。とりあえず、bisonとflexの連携部分を試すことにした。

まずは、bison

number.y
%{
#include <stdio.h>
#include <string.h>
 
void yyerror(const char *str)
{
        fprintf(stderr,"error: %s\n",str);
}
 
int yywrap(void)
{
        return 1;
} 
  
int main(void)
{
        yyparse();
        return 0;
} 

%}

%token NUMBER

%%
expr :
	number
	| expr number
	;

number
	: NUMBER
	{
		printf("[NUMBER]");
	};
%%

bison側にmainを書く。makeのように依存を書いていく。expr部分は相当自信が無い。

number.l
%{
#include <stdio.h>
#include "number.tab.h"
%}

%%
[0-9]+		return NUMBER;
%%

flex側に、「bison -d」で自動生成されたヘッダを入れる。

Makefile
all :
	bison -d number.y
	flex number.l
	cc lex.yy.c number.tab.c -o number

makeする。

$ make
$ ./number
123 456
[NUMBER] [NUMBER]

前回より機能制限しながらも、連携部分だけは確認できた。

使ってみると、言語作成以外にも応用範囲が広いことがわかる。

さて次のターゲットは何かなぁ・・・。浅く広くなのだ。

Vimは何でも色が付くな・・・凄すぎ。