实验四-编译-用Yacc工具构造语法分析器(共10页).doc
《实验四-编译-用Yacc工具构造语法分析器(共10页).doc》由会员分享,可在线阅读,更多相关《实验四-编译-用Yacc工具构造语法分析器(共10页).doc(10页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上实验4 用Yacc工具构造语法分析器一、实验目的掌握移进-归约技术语法分析技术,利用语法分析器生成工具Yacc/Bison实现语法分析器的构造。二、实验内容利用语法分析器生成工具Yacc/Bison编写一个语法分析程序,与词法分析器结合,能够根据语言的上下文无关文法,识别输入的单词序列是否文法的句子。源语言的文法定义见教材附录 A.1,p394,要求实现完整的语言。三、实验要求个人完成,提交实验报告。实验报告中给出采用测试源代码片断,及其对应的最右推导过程(形式可以自行考虑,如依次给出推导使用的产生式)。例如,程序片断四、实验思路本次实验是一次实现词法分析和语法分析的
2、过程,词法分析的内容与第二次实验类似,对关键词,数字,标识符以及其他类型的字符进行识别,分别返回对应的数据类型,这个过程相对来说是比较简单的,由于有特定的词法分析过程的格式,很容易将代码编写出来。语法分析的过程则给出了文法以及相应的语义动作,代码的编写相对比较复杂。首先,在D:FlexBison的目录下建立一个文件夹,我命名为expmt3,将bison.exe和flex.exe放到expmt3目录下。然后编写mylex.l文件和myyacc.y文件,在dos下切换到expmt3目录下,先用命令flex mylex.l生成lex.yy.c文件,再用命令bison d myyacc.y生成myya
3、cc.tab.c文件和myyacc.tab.h文件,在这个目录中再新建一个example.c文件,用vc+打开这个文件,然后编译这个文件,再将前两步生成的lex.yy.c、myyacc.tab.c和myyacc.tab.h文件加入到工程中,再编译并连接生成可执行文件。最后测试程序的正确性要在expmt3的debug目录下创建一个测试文件test.txt,将测试片段放入其中,然后在dos界面运行程序,知道产生正确的结果,实验就完成了。五、具体代码Mylex.l%option noyywrap%#include#include#include#include#include myYacc.tab.
4、h%delim tnws delim+letter A-Za-zdigit 0-9%ws if printf(IF );return(IF);else printf(ELSE );return(ELSE);int printf(INT ); return(BASIC);float printf(FLOAT ); return(BASIC);break printf(BREAK);return(BREAK);do printf(DO );return(DO);while printf(WHILE );return(WHILE);true printf(TRUE );return(TRUE);in
5、dex printf(INDEX ); return(INDEX);bool printf(BOOL ); return(BASIC);char printf(CHAR ); return(BASIC);real printf(real);return(REAL);false printf(FLASE ); return(FALSE);a-zA-Z_a-zA-Z0-9_* printf(ID);return(ID);+-?0-9+ printf(NUM);return(NUM);+-?0-9*.0-9+ printf(NUM);return(NUM); printf(LT );return()
6、; printf(GT );return();= printf(GE );return(GE);+ printf(+ );return(+);- printf(- );return(-); printf( );return(); printf( );return(); printf();return(); printf();return();( printf();return();) printf();return(); printf(;);return(;);, printf(,);return(,);& printf(&);return(AND);| printf(|);return(OR
7、);%Myyacc.y%#include#includeextern int yylex();extern int yyerror();%token NUM%token ID %token IF WHILE DO BREAK REAL TRUE FALSE BASIC ELSE INDEX GE LE NE EQ AND OR%program : block printf(program-blockn); ;block : decls stmts printf(block-decls stmtsn); ;decls : | decls decl printf(decls-decls decln
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 编译 Yacc 工具 构造 语法 分析器 10
限制150内