实验四-编译-用Yacc工具构造语法分析器.doc

实验四-编译-用Yacc工具构造语法分析器.doc

ID:55173950

大小:364.50 KB

页数:10页

时间:2020-04-30

实验四-编译-用Yacc工具构造语法分析器.doc_第1页
实验四-编译-用Yacc工具构造语法分析器.doc_第2页
实验四-编译-用Yacc工具构造语法分析器.doc_第3页
实验四-编译-用Yacc工具构造语法分析器.doc_第4页
实验四-编译-用Yacc工具构造语法分析器.doc_第5页
资源描述:

《实验四-编译-用Yacc工具构造语法分析器.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、实验4用Yacc工具构造语法分析器一、实验目的掌握移进-归约技术语法分析技术,利用语法分析器生成工具Yacc/Bison实现语法分析器的构造。二、实验内容利用语法分析器生成工具Yacc/Bison编写一个语法分析程序,与词法分析器结合,能够根据语言的上下文无关文法,识别输入的单词序列是否文法的句子。源语言的文法定义见教材附录A.1,p394,要求实现完整的语言。三、实验要求1.个人完成,提交实验报告。2.实验报告中给出采用测试源代码片断,及其对应的最右推导过程(形式可以自行考虑,如依次给出推导使用的产生式)。例如,程序片断四、实验思路本次实验是一次实现

2、词法分析和语法分析的过程,词法分析的内容与第二次实验类似,对关键词,数字,标识符以及其他类型的字符进行识别,分别返回对应的数据类型,这个过程相对来说是比较简单的,由于有特定的词法分析过程的格式,很容易将代码编写出来。语法分析的过程则给出了文法以及相应的语义动作,代码的编写相对比较复杂。首先,在D:FlexBison的目录下建立一个文件夹,我命名为expmt3,将bison.exe和flex.exe放到expmt3目录下。然后编写mylex.l文件和myyacc.y文件,在dos下切换到expmt3目录下,先用命令flexmylex.l生成lex.yy

3、.c文件,再用命令bison–dmyyacc.y生成myyacc.tab.c文件和myyacc.tab.h文件,在这个目录中再新建一个example.c文件,用vc++打开这个文件,然后编译这个文件,再将前两步生成的lex.yy.c、myyacc.tab.c和myyacc.tab.h文件加入到工程中,再编译并连接生成可执行文件。最后测试程序的正确性要在expmt3的debug目录下创建一个测试文件test.txt,将测试片段放入其中,然后在dos界面运行程序,知道产生正确的结果,实验就完成了。五、具体代码Mylex.l%optionnoyywrap%{

4、#include#include#include#include#include"myYacc.tab.h"%}delim[t]ws{delim}+letter[A-Za-z]digit[0-9]%%{ws}{}"if"{printf("IF");return(IF);}"else"{printf("ELSE");return(ELSE);}"int"{printf("INT");return(BASIC);}"float"{printf("FLOAT");return(

5、BASIC);}"break"{printf("BREAK");return(BREAK);}"do"{printf("DO");return(DO);}"while"{printf("WHILE");return(WHILE);}"true"{printf("TRUE");return(TRUE);}"index"{printf("INDEX");return(INDEX);}"bool"{printf("BOOL");return(BASIC);}"char"{printf("CHAR");return(BASIC);}"real"{printf(

6、"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('<');}"<="{printf("LE");return(LE);}"="{printf("=");return(

7、'=');}"=="{printf("EQ");return(EQ);}"!="{printf("NE");return(NE);}">"{printf("GT");return('>');}">="{printf("GE");return(GE);}"+"{printf("+");return('+');}"-"{printf("-");return('-');}"["{printf("[");return('[');}"]"{printf("]");return(']');}"{"{printf("{");return('{');}"}"{prin

8、tf("}");return('}');}"("{printf("(");return('('

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。