bison程序的结构
文件类型:PPT/Microsoft Powerpoint 文件大小:1273字节
内容摘要:
bison程序的结构
bison程序由三部分组成:定义段,规则段,
用户子例程段
…定义段…
%%
…规则段…
%%
…用户子例程段…
定义段
定义段包括文字块,逐字拷贝到生成的C
文件开头部分的C代码.通常包括#define
和#include行.可能有%union,
%token等声明.
规则段
规则段由语法规则和包括C代码的动作组
成.动作是bison在与语法规则相符的时候
执行的C代码.
用户子例程段
用户子例程段通常包括从动作中调用的例
程.
flex程序的结构
flex程序也由三部分组成:定义段,规则
段,用户子例程段
…定义段…
%%
…规则段…
%%
…用 户子例程段…
规则段
规则段包括模式行和C代码.C代码在与这
个模式匹配的时候执行.如果C代码包括
多条语句,则必须用括号加以界定.
用户子例程段
与bison一样,用户子例程段的内容被flex
逐字拷贝到C文件中.这一部分包括从规
则中调用的例程.如果重新定义了
yywrap()等例程,新的版本就可以放在这
里.
%token NAME NUMBER
%%
statement: NAME '=' exp
| exp { printf("= %d\n", $1); }
;
exp: NUMBER '+' NUMBER { $$ = $1 + $3; }
| NUMBER '-' NUMBER { $$ = $1 - $3; }
| NUMBER { $$ = $1; }
;
%%
main ()
{
yyparse ();
}
yyerror(s)
char *s;
{
fprintf(stderr, "%s\n", s);
}
exam.y
%{
#include "exam.tab.h"
extern int yylval;
#undef yywrap
%}
%%
[ \t] ;
[0-9]+ { yylval = atoi(yytext);
return NUMBER; }
\n return 0;
. return yytext[0];
%%
int yywrap()
{
return 1;
}
exam.l
编译和运行
% bison –d exam.y
% flex exam.y
% cc –o exam exam.tab.c lex.yy.c
% exam
3-5
= -2
·上一篇:
第一篇生物大分子的结构与功能·下一篇:
各种阀门的结构及选用特点