欢迎来到课桌文档! | 帮助中心 课桌文档-建筑工程资料库
课桌文档
全部分类
  • 党建之窗>
  • 感悟体会>
  • 百家争鸣>
  • 教育整顿>
  • 文笔提升>
  • 热门分类>
  • 计划总结>
  • 致辞演讲>
  • 在线阅读>
  • ImageVerifierCode 换一换
    首页 课桌文档 > 资源分类 > DOC文档下载  

    编译原理实验报告词法分析器语法分析器.doc

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

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

    编译原理实验报告词法分析器语法分析器.doc

    -编译原理实验报告实验一一、实验名称:词法分析器的设计二、实验目的:1,词法分析器能够识别简单语言的单词符号 2,识别出并输出简单语言的基本字.标示符.无符号整数.运算符.和界符。三、实验要求:给出一个简单语言单词符号的种别编码词法分析器四、实验原理:1、词法分析程序的算法思想算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。2、程序流程图(1)主程序输入要分析的语句调用扫描、分析程序输出单词符号二元组结束判断读入字符是否为"#”(2)扫描子程序Token清空当前字符=?标示符常数表中查找结束 Error()输出二元式基本字用户标示符结束Get()3、各种单词符号对应的种别码单词符号种别码助记符码值while1while-if2if-else3else-switch4switch-case5case-标识符6idid在符号表中的位置常数7numnum在常数表中的位置+8+-9-*10*-<=11relopLE<11relopLT=11relopEQ=12=-;13;-五、实验容:1、实验分析编写程序时,先定义几个全局变量a、token(均为字符串数组),c,s( char型),i,j,k(int型),a用来存放输入的字符串,token另一个则用来帮助识别单词符号,s用来表示正在分析的字符。字符串输入之后,逐个分析输入字符,判断其是否#,若是表示字符串输入分析完毕,结束分析程序,若否则通过int digit(char c)、int letter(char c)判断其是数字,字符还是算术符,分别为用以判断数字或字符的情况,算术符的判断可以在switch语句中进行,还要通过函数int lookup(char token)来判断标识符和保留字。2 实验词法分析器源程序:#include <stdio.h>#include <math.h>#include <string.h>int i,j,k;char c,s,a20,token20='0'int letter(char s)if(s>=97)&&(s<=122) return(1);else return(0);int digit(char s)if(s>=48)&&(s<=57) return(1);else return(0);void get()s=ai;i=i+1;void retract()i=i-1;int lookup(char token20)if(strcmp(token,"while")=0) return(1);else if(strcmp(token,"if")=0) return(2);else if(strcmp(token,"else")=0) return(3);else if(strcmp(token,"switch")=0) return(4);else if(strcmp(token,"case")=0) return(5);else return(0);void main()printf("please input string :n");i=0; doi=i+1;scanf("%c",&ai);while(ai!='#');i=1;j=0;get();while(s!='#') memset(token,0,20);switch(s)case 'a':case 'b': case 'c':case 'd':case 'e':case 'f':case 'g':case 'h':case 'i':case 'j':case 'k':case 'l':case 'm':case 'n':case 'o':case 'p':case 'q':case 'r':case 's':case 't':case 'u':case 'v':case 'w':case '*':case 'y':case 'z':while(letter(s)|digit(s)tokenj=s;j=j+1;get();retract();k=lookup(token);if(k=0)printf("(%d,%s)",6,token);else printf("(%d,-)",k);break; case '0':case '1':case '2':case '3':case '4':case '5':case '6':case '7':case '8':case '9':while(digit(s)tokenj=s;j=j+1;get();retract();printf("%d,%s",7,token);break;case '+':printf("('+',NULL)");break;case '-':printf("('-',null)");break; case '*':printf("('*',null)");break;case '<':get();if(s='=') printf("(relop,LE)");elseretract();printf("(relop,LT)");break; case '=':get();if(s='=')printf("(relop,EQ)");elseretract();printf("('=',null)");break;case '':printf("(;,null)");break;case ' ':break;default:printf("!n");j=0;get();六:实验结果: 实验二一、 实验名称:语法分析器的设计二、 实验目的:用C语言编写对一个算术表达式实现语法分析的语法分析程序,并以四元式的形式输出,以加深对语法语义分析原理的理解,掌握语法分析程序的实现方法和技术。三、 实验原理:1、算术表达式语法分析程序的算法思想首先通过关系图法构造出终结符间的左右优先函数f(a),g(a)。在分析的过程中,通过左右优先函数比较当前读入终结符与前一个读入终结符间的优先关系,分析后适时的以四元式形式输出相关的符号。2、通过优先函数关系图构造优先函数优先函数表+*i()f46626g35772f*fif(f)g+g)g*gig(f+优先函数关系图四、实验容:1、实验分析本实验所用文法是: GE:E->E+E|E-E|E*E|E/E|(E)E->0|1|2|3|9根据此文法编写程序时,算术表达式的求解过程需要用到算术符号的优先判断,定义两个字符串数组optr、opnd用来模拟栈,存放算术符和操作数,用a来存放表达式字符串,在分析时还要通过函数int f(char c)和int g(char c),判断运算符之间的优先关系,根据不同情况作各种不同操作。流程图如下:输入算数表达式,以#结束初始化loptr1=#用get()取一个待分析字符sOptr1和s是否同时为#判断S是否为运算量Floptrj<g(s)Floptrj=g(s)Floptrj>g(s)其他情况error()当前字符栈optr栈顶元素出栈结束存入opndget()2,实验程序源代码:#include<stdio.h>char a21,optr10,op,s;int opnd10,i,j,k,*1,*2,*3;int operand(char s)if(s>=48)&&(s<=57) return 1;else return 0;int f(char s)switch(s) case '+':return 4;break; case '*':return 6;break;case 'i':return 6;break;case '(':return 2;break;case ')':return 6;break;default:return 0;int g(char s)switch(s) case '+':return 3;break; case '*':return 5;break; case 'i':return 7;break; case '(':return 7;break; case ')':return 2;break; default:return 0;void get()s=ai;i+;void main()printf("请输入表达式(以#结束):n");i=0;doi+; scanf("%c",&ai);while(ai!='#');i=j=k=1;optrj='#'get();while(!(optrj='#')&&(s='#')if(operand(s) opndk=s-48;k+;get();else if (f(optrj)<g(s) j+;optrj=s;get(); else if (f(optrj)>g(s) op=optrj; j-; *1=opndk-1; *2=opndk-2; k=k-2; switch(op) case '+':*3=*1+*2;break; case '*':*3=*1*2;break; default:break; opndk=*3; k+; printf("(%c,%d,%d,%d)n",op,*2,*1,*3); else j-;get(); 3实验结果:心得体会:通过本次实验,我更加深刻的学习到了很多: 1、通过实验我对词法分析和语法分析原理有了更深刻的理解。2、而且对词法分析和语法分析在实践中的应用有了深入的掌握。3、更加熟悉了构造词法分析程序和语法分析程序的手工方式的相关原理,能够实现对词法分析程序所提供的单词符号序列进行相应的语法检查和结构分析,达到了学以致用的目的。. z.

    注意事项

    本文(编译原理实验报告词法分析器语法分析器.doc)为本站会员(夺命阿水)主动上传,课桌文档仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知课桌文档(点击联系客服),我们立即给予删除!

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




    备案号:宁ICP备20000045号-1

    经营许可证:宁B2-20210002

    宁公网安备 64010402000986号

    课桌文档
    收起
    展开