河北工业大学语义分析实验报告.docxVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
河北工业大学语义分析实验报告

实验三 语义分析程序实现 一、实验设计 在实现词法、语法分析程序的基础上,编写相应的语义子程序,进行语义处理,加深对语法制导翻译原理的理解,进一步掌握将语法分析所识别的语法范畴变换为某种中间代码(四元式)的语义分析方法。 基本实验题目:对文法G2[算术表达式]中的产生式添加语义处理子程序,完成运算对象是简单变量(标识符)和无符号数的四则运算的计值处理,将输入的四则运算转换为四元式形式的中间代码。 语法制导翻译模式是在语法分析的基础上,增加语义操作来实现的,实际上是对前后文无关文法的一种扩展。一般而言,首先需要根据进行的语义分析工作,完成对给定文法的必要拆分和语义动作的编写,从而为每一个产生式都配备相应的语义子程序,以便在进行语法分析的同时进行语义解释。即在语法分析过程中,每当用一个产生式进行推导或归约时,语法分析程序除执行相应的语法分析动作之外,还要调用相应的语义子程序,以便完成生成中间代码、查填有关表格、检查并报告源程序中的语义错误等工作。每个语义子程序需指明相应产生式中各个符号的具体含义,并规定使用该产生式进行分析时所应采取的语义动作。这样,语法制导翻译程序在对源程序从左到右进行的一遍扫描中,既完成语法分析任务,又完成语义分析和中间代码生成方面的工作。本实验要求从编译器的整体设计出发,重点通过对实验二中语法分析程序的扩展,完成一个编译器前端程序的编写、调试和测试工作,形成一个将源程序翻译为中间代码序列的编译系统。 二、程序代码 在词法分析和语法分析的基础上,完成了语义的分析,同样采用了头文件的形式,在VC++6.0中运行 #includestdio.h #includectype.h #includestdlib.h #includestring.h #includemath.h #includecifa.h #includefenxibiao.h # define PL 15 //+ # define MI 16 //- # define MU 17 # define DI 18 #define acc 100 #define MAXState 20 #define NUMBER 9//表达式的个数 #define MAXTEMP 10//最多临时变量的个数 int State[MAXState];//状态栈 int i=0; int CURRENTSTATE=0;//标识当前状态 int LENGTH[NUMBER]={1,3,3,1,3,3,1,3,1};//表达式右边的长度 int length; int index;//索引 int Yes=0;//判断是否结束 int tag=0;//判断是否需要调用词法程序 //extern char * cifa(); double e1,t4,f7;//整形 char e12[20],t42[20],f72[20];//字符型 int TEMP[MAXTEMP]; int temp=0; int biaoshifu=0; FILE * fp; void REPORT_ERROR() { Yes=1; long f1=ftell(fp); char ch=fgetc(fp); fseek(fp,-1,1); printf(语法错误,第%d个字符%C处\n,f1,ch); } void Accept() { Yes=1; //printf(语法分析成功\n); } int INDEX(char a)//获取当前字符串对应的索引 { int i; switch (a) { case E:i=8;return(i);break; case T:i=9;return(i);break; case F:i=10;return(i);break; default: REPORT_ERROR();return(0); break; } } void Gen(int a,double i1,double i2,int t)//输出四元式 { switch(a) { case PL:printf((+,%g,%g,%d)\n,i1,i2,t); break; case MI:printf((-,%g,%g,%d)\n,i1,i2,t); break; case MU:printf((*,%g,%g,%d)\n,i1,i2,t); break; case DI:printf((/,%g,%g,%d)\n,i1,i2,t); break; default:break; } } void yuyi(int n)//语义子程序 { switch(n) { case 1: { temp++;//产生临时变量,

文档评论(0)

jiupshaieuk12 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:6212135231000003

1亿VIP精品文档

相关文档