欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    编译原理课程设计实验报告(共9页).docx

    • 资源ID:14362317       资源大小:96.95KB        全文页数:9页
    • 资源格式: DOCX        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    编译原理课程设计实验报告(共9页).docx

    精选优质文档-倾情为你奉上中 国 海 洋 大 学 实 验 报 告  姓名:邓汇星        专业年级:2012级计算机            学号:        同组人: 窦猛 专业年级:2012级计算机 学号:  编译原理课程设计实验报告【实验题目】:实验1:用Lex设计词法分析器1【实验目的】:学会用lex设计一个词法分析器。【实验内容】:使用lex为下述文法语言写一个词法分析器。语言文法:<程序>à PROGRAM <标识符> ; <分程序><分程序>à <变量说明> BEGIN <语句表> END.<变量说明> à VAR <变量说明表><变量说明表>à<变量表>: <类型> | <变量表>: <类型> <变量说明表><类型>à INTEGER | REAL<变量表>à <变量> | <变量>, <变量表><语句表>à <语句> | <语句> <语句表><语句>à <赋值语句> | <条件语句> | <WHILE语句> | <复合语句><赋值语句>à<变量> := <算术表达式><条件语句>à IF <关系表达式> THEN <语句> ELSE <语句><WHILE语句>à WHILE <关系表达式> DO <语句><复合语句> à BEGIN <语句表> END<算术表达式> à <项> | <算术表达式> + <项> | <算术表达式> - <项><项> à <因式> | <项> * <因式> | <项> / <因式><因式>à <变量> | <常数> | (<算术表达式>)<关系表达式>à <算术表达式> <关系符> <算术表达式><变量>à <标识符><标识符>à <标识符><字母> | <标识符><数字> | <字母><常数>à <整数> | <浮点数><整数>à <数字> | <数字> <整数><浮点数>à .<整数> | <整数>.<整数><关系符>à < | <= | = | > | >=| <><字母>à A | B | | X | Y | Z | a | b | | x | y | z<数字>à0|1|2|9【实验要求】:输入为用该语言所写的源程序文件;输出为记号序列,每个记号显示为二元组(记号名,记号属性值)的形式。输出可以在屏幕上,也可以输出到文件中。不要求建立符号表。在cygwin下用flex和gcc工具将实验调试通过,并能通过例子parser0中testcases目录下的test1.p测试例的测试。【实验参考】:exam1.l和exam2.l。请认真阅读例子,发现错误及时提出。【实验过程】:根据编译原理实验的exam1.l和exam2.l的代码进行修改,添加对一些符号的定义,设计成为一个新的此法分析器,使得改词法分析器能够对实验要求的记号进行识别,识别效果如下:PROGRAM test;VAR i, j, k: INTEGER; f0: REAL;BEGIN i := 1; j := 1; k := 0; f0 := 3.2; WHILE k<=100 DO BEGIN IF j <20 THEN BEGIN j := i; k := k+1; f0 := f0*0.2 END ELSE BEGIN j := k; k := k-2; f0 := f0/.2 END ENDEND.【实验结果截图】;程序用flex和gcc编译调试通过后,以test1.p中的内容座位输入进行词法分析得到以下结果:test1.p的内容如下:PROGRAM test;VAR i, j, k: INTEGER; f0: REAL;BEGIN i := 1; j := 1; k := 0; f0 := 3.2; WHILE k<=100 DO BEGIN IF j <20 THEN BEGIN j := i; k := k+1; f0 := f0*0.2 END ELSE BEGIN j := k; k := k-2; f0 := f0/.2 END ENDEND.【实验程序代码】/* 把讨厌的注释去掉 */%#include <stdio.h> #define LT1#defineLE2#define GT3#defineGE4#defineEQ5#define NE6#define WHILE18#defineDO19#define ID 20#define NUMBER 21#define RELOP 22#define NEWLINE 23#define ERRORCHAR 24#define _PROGRAM 25#define _VAR 26#define _INTEGER 27#define _REAL 28#define _END 29#define _THEN 30#define fenhao 31#define maohao 32#define douhao 33#define jiahao 34#define chuhao 35#define dian 36#define chenghao 37#define jianhao 38#define _BEGIN 39#define _ELSE 40% delim t nwsdelim+letterA-Za-zdigit0-9idletter(letter|digit)*numberdigit+(.digit+)?(E+-?digit+)?/* 状态(或条件)定义可以定义在这里 * INITIAL是一个默认的状态,不需要定义 */%s COMMENT%<INITIAL>"/*"BEGIN COMMENT;ECHO;<COMMENT>"*/"BEGIN INITIAL;ECHO;<COMMENT>.|nECHO; /* ECHO是一个宏,相当于 fprintf(yyout, "%s", yytext)*/<INITIAL>ws ;<INITIAL>whilereturn (WHILE);<INITIAL>"WHILE"return(WHILE);<INITIAL>do return (DO);<INITIAL>"ELSE"return(_ELSE);<INITIAL>"PROGRAM" return (_PROGRAM);<INITIAL>"BEGIN"return (_BEGIN);<INITIAL>"VAR" return (_VAR);<INITIAL>"INTEGER" return (_INTEGER);<INITIAL>"END" return (_END);<INITIAL>"REAL" return (_REAL);<INITIAL>"THEN" return (_THEN);<INITIAL>number return (NUMBER);<INITIAL>id return (ID);<INITIAL>"<" return (RELOP);<INITIAL>"<=" return (RELOP);<INITIAL>"=" return (RELOP);<INITIAL>"<>" return (RELOP);<INITIAL>">" return (RELOP);<INITIAL>">=" return (RELOP);<INITIAL>":=" return (RELOP);<INITIAL>""return (fenhao);<INITIAL>"," return (douhao);<INITIAL>":" return (maohao);<INITIAL>"+" return (jiahao);<INITIAL>"-" return (jianhao);<INITIAL>"*" return (chenghao);<INITIAL>"/" return (chuhao);<INITIAL>"." return (dian);<INITIAL>. return ERRORCHAR; %int yywrap () return 1;void writeout(int c) switch(c) case ERRORCHAR: fprintf(yyout, "(ERRORCHAR, "%s") ", yytext);break; case RELOP: fprintf(yyout, "(RELOP, "%s") ", yytext);break; case WHILE: fprintf(yyout, "(WHILE, "%s") ", yytext);break; case DO: fprintf(yyout, "(DO, "%s") ", yytext);break; case NUMBER: fprintf(yyout, "(NUM, "%s") ", yytext);break; case ID: fprintf(yyout, "(ID, "%s") ", yytext);break; case NEWLINE: fprintf(yyout, "n");break;case _PROGRAM: fprintf(yyout,"(PROGRAM)");break; case _BEGIN: fprintf(yyout,"(BEGIN)");break;case _VAR: fprintf(yyout, "(VAR)", yytext); break;case _INTEGER: fprintf(yyout, "(INTEGER)", yytext); break;case _REAL: fprintf(yyout, "(REAL)", yytext); break;case _END: fprintf(yyout, "(END)", yytext); break;case _THEN: fprintf(yyout, "(THEN)", yytext); break;case maohao:fprintf(yyout, "(maohao)", yytext); break;case fenhao: fprintf(yyout, "(fenhao)", yytext); break;case douhao: fprintf(yyout, "(douhao)", yytext); break;case jiahao: fprintf(yyout, "(jiahao)", yytext); break;case chuhao: fprintf(yyout, "(chuhao)", yytext); break;case dian: fprintf(yyout, "(dian)", yytext); break;case chenghao: fprintf(yyout, "(chenghao)", yytext); break;case janhao: fprintf(yyout, "(janhao)", yytext); break;case _ELSE: fprintf(yyout, "(ELSE)", yytext); break; default:break; fprintf(yyout, "n"); return;int main (int argc, char * argv)int c,j=0;if (argc>=2) if (yyin = fopen(argv1, "r") = NULL) printf("Can't open file %sn", argv1); return 1; if (argc>=3) yyout=fopen(argv2, "w"); while (c = yylex()writeout(c);j+;if (j%5 = 0) writeout(NEWLINE);if(argc>=2) fclose(yyin); if (argc>=3) fclose(yyout);return 0;【实验心得】通过本次实验,我们学会了在cygwin下用flex编译程序,并成功写了一个词法分析器能够对实验要求中给出的测试样例进行正确无误的词法分析。这使得我们进一步学会用lex来写词法分析器,也让我们对编译原理课上所学关于词法分析器的部分有了更为深刻的认识和理解。专心-专注-专业

    注意事项

    本文(编译原理课程设计实验报告(共9页).docx)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开