- 2
- 0
- 约2.99千字
- 约 6页
- 2017-06-05 发布于湖北
- 举报
编译实验二概要
使用flex和bison生成语法分析器:首先对第一次实验中的词法分析器的程序进行修改:%option noyywrap%{#includestdio.h#includestdlib.h#includebiso.tab.h%}identifier_int [A-Za-z]([A-Za-z]|[0-9])*decimalism_int 0|(1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)*octonary_int 0(0|1|2|3|4|5|6|7)(0|1|2|3|4|5|6|7)*hexadecimal 0(x|X)(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)*space [ \n\t]%%{space} { }if {return IF;}then {return THEN;}else {return ELSE;}while {return WHILE;}do {return DO;}+ {return add;}- {return sub;}* {return mul;}/ {return divi;}; {return semicolon;}= {return equal;} {return greater_than;} {return less_than;}= {return LE;}= {return GE;}[A-Za-z]([A-Za-z]|[0-9])* {return IDE;}(1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)*|0 {return INT10;}0(0|1|2|3|4|5|6|7)+ {return INT8;}0x(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)* {return INT16;}( {returnleft_bracket;}) {return right_bracket;}%%我们可以看到,相较于第一个实验中的头文件,宏定义全部删除,增加了一个头文件,biso.tab.h,这个头文件是bison代码编译后生成的文件,在这个文件中,我们可以看到实验一中所有宏定义。然后将实验一中代码的主函数等全部删除,只留下第一部分和第二部分。接着实现bison部分代码,这个部分是调用实验一的词法分析程序来采用LALR(1)文法来分析语法:%{#includectype.h#includestdio.h%}%token IDE%token INT8%token INT10%token INT16%token IF left_bracketright_bracket ELSE THEN WHILE DO add sub muldivi semicolon equal greater_thanless_than GE LE%%S:IDE equal E{printf(S - IDE=E\n);} |IF C THEN S{printf(S - IF C THEN S\n);} |WHILE C DO S{printf(S - WHILE C DO S\n);};C:Egreater_than E{printf(C - EE\n);} |E less_thanE{printf(C - EE\n);} |E equal E{printf(C - E=E\n);};E:E add T{printf(E - E+T\n);} |E sub T{printf(E - E-T\n);} |T{printf(E - T\n);};T:F{printf(T - F\n);} |T mulF{printf(T - T*F\n);} |T diviF{printf(T - T/F\n);};F:IDE{printf(F - IDE\n);} |left_bracket E right_bracket{printf(F - (E)\n);} |INT8{printf(F - INT8\n);} |INT10{printf(F - INT10\n);} |INT16{printf(F - INT16\n);};%%#include lex.yy.cmain(intargc,char **argv) {yyin=fopen(1.txt,r); yyparse(); } yyerror(char *s) { fprintf(stderr,error:%s\n,s);} 然后,我们在bison文件中,主函数前面加上头文件#include”lex.yy.c”,这样它就会
您可能关注的文档
- 课堂新坐标2016_2017学年高中化学第4章电化学基础第3节电解池第1课时电解原理课件.ppt
- 课堂新坐标2016_2017学年高中化学第4章电化学基础第1节原电池课件.ppt
- 课堂新坐标2016_2017学年高中物理第14章电磁波章末分层突破课件.ppt
- 综合布线技术.ppt
- 课堂新坐标2016_2017学年高中化学第4章保护生存环境第3节垃圾资源化课件.ppt
- 课堂新坐标2016_2017学年高中物理第14章电磁波12电磁波的发现电磁振荡课件.ppt
- 课堂新坐标2016_2017学年高中物理第1章电与磁综合测评.doc
- 课堂新坐标2016_2017学年高中物理第1章电场电流1电荷库仑定律课件.ppt
- 绿手指_课件.ppt
- 绿植注意事项.docx
原创力文档

文档评论(0)