[Bison] 安裝及使用Bison

介紹

Unix底下的yacc在Windows有Bison可使用。

安裝

Bison網站下載,其它設定可看[Flex] 安裝及使用Flex

使用

加法的範例。

ex1.l

1
2
3
4
5
6
7
8
9
10
%{
#include "ex1.tab.h"
%}
%%
\n {return(0) ;}
[ \t]+ {;}
[0-9]+ {yylval.ival = atoi(yytext);return(INUMBER);}
"+"|"("|")" {return(yytext[0]);}
. {return(yytext[0]);}
%%

ex1.y

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
%{
#include <stdio.h>
#include <string.h>
void yyerror(const char *message);
%}
%union{
int ival ;
}
%token<ival> INUMBER
%type<ival> expr
%left '+'
%%
line :expr {printf("%d\n",$1);}
;
expr : expr '+' expr {$$=$1+$3;}
| INUMBER
;
%%
void yyerror(const char *message){
;
}
int main(int argc, char** argv)
{
yyparse();
return(0);
}

依序輸入以下指令即可產生執行檔。

1
2
3
4
5
flex ex1.l
bison -d ex1.y
gcc -c -g -I.. ex1.tab.c
gcc -c -g -I.. lex.yy.c
gcc -o ex1 ex1.tab.o lex.yy.o -lfl