编译原理 lex yacc 的联合使用 实验报告.doc

编译原理 lex yacc 的联合使用 实验报告.doc

ID:54762744

大小:42.50 KB

页数:9页

时间:2020-04-21

编译原理 lex yacc 的联合使用 实验报告.doc_第1页
编译原理 lex yacc 的联合使用 实验报告.doc_第2页
编译原理 lex yacc 的联合使用 实验报告.doc_第3页
编译原理 lex yacc 的联合使用 实验报告.doc_第4页
编译原理 lex yacc 的联合使用 实验报告.doc_第5页
资源描述:

《编译原理 lex yacc 的联合使用 实验报告.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、《编译原理》课程实验报告题目lexyacc的联合使用专业班级学号姓名一.实验题目lexyacc的联合使用二.实验日期三.实验环境(操作系统,开发语言)操作系统是Windows开发语言是C语言四.实验内容(实验要求)目的:熟悉lex和yacc的接口要求:(1)能对整数、实数进行带变量的四则运算(2)词法分析用lex实现(3)语法分析用yacc实现(4)交源代码和实验报告一.实验步骤1.在实验二的基础上修改代码,并添加上以下的代码:double{returnDOUBLE;}EOF{return0;}{ID}{returnI

2、D;}2.在DOS环境下按照之前的步骤利用flex运行myleb.l,修改其中的错误之后,生成lex.yy.c文件。3.参照书中第14章第7节和myparser-fifth.y文件中的代码,和老师说的思路修改myparser-sixth.y文件,按照实验要求修改代码。4.在DOS环境下利用yacc运行myparser-sixth.y文件,会有出错提示,按照出错的地方指示,修改代码,使其最终能通过运行,生成y.tab.c文件。(此步骤还未完成)5.打开c-free5.0,新建工程,在Sourcefiles文件夹中添加之前

3、生成的lex.yy.c文件和y.tab.c文件,然后找到已给的calc.h文件,将其添加到新建工程中的Headerfiles文件夹中,这时就能将三个文件组成一个类似于.exe文件类型的文件,最后运行。6.运行并调试成功。二.实验体会(包括收获、心得体会、存在的问题及解决问题的方法、建议等)这是最后一次实验了,但这次的难度是有史以来最难的一次实验,因为要结合之前我们学到的所有东西。首先要修改.l文件的代码,再把此文件用lex运行,即词法分析部分用lex完成;然后是修改myparser-sixth.y文件,尽管有参照的代码

4、,但是要自己实现能对整数和实数进行带变量的四则运算,对于还没有完全掌握.y文件编写的我还是太有难度了,自己先是完成了只对实数的运算,也能运行,但只要添加上实数就会出错,研究了很久,还是没有找出来哪里还有错误;有时候也会出现用yacc运行没错误,但用c-free运行就会出错,提示说.h文件有错误,找了半天,也修改了很多。却仍然不知道哪里有错。总的来说,虽然没有完成最终的目的,但是我已经尽力了。一.实验结果(关键源代码)Myleb.l文件代码:%optionnoyywrapDIGIT[0-9]ID[a-zA-Z][a-zA

5、-Z0-9]*%{#include%}%%{DIGIT}+"."{DIGIT}*{returnNUM;}"/*"[^}]*"*/"printf("33");"^"printf("34%s",yytext);"+"printf("35%s",yytext);"-"printf("36%s",yytext);"*"printf("37%s",yytext);"/"printf("38%s",yytext);"("printf("39%s",yytext);")"printf

6、("40%s",yytext);"["printf("41%s",yytext);"]"printf("42%s",yytext);"{"printf("43%s",yytext);"}"printf("44%s",yytext);double{returnDOUBLE;}EOF{return0;}{ID}{returnID;}.printf("100%s",yytext);%%main(void){yylex();}myparser-sixth.y文件代码:/*带整数int和实数double变

7、量声明的加减乘除四则运算*/%{#include#include#include#include#include"genMidCode.h"externcharyytext[20];externSYMREC*sym_table;intid_type;SYMREC*sym;typedefstruct{unioninval{doubledo;intin;}intvalType;}VALUE;%}//定义语义栈的数据类型有两种数据类型整数和实数仿照p25

8、2中间union部分%union{VALUEval;SYMREC*tptr;inttype;}//终结符和非终结符对应的符号类型,自己定义%tokenNUMDOU%tokenNUMINT%tokenID%tokenDOUBLE%tokenINTEGER%typeex

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

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

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