




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
编译原理实验报告姓名:***班级:***学号:***指导老师:***实验一编译程序的分析与验证实验目的:熟练掌握LR分析表以及编译原理的基本过程,学会分析编译程序。二、实验要求: 理论联系实际,将所学知识用到实处。上机实验,验证老师给的代码的正确性,进而学会怎么写编译程序。三、实验内容:验证自己的文法的正确性,识别文法中的单词、句子、关键字、变量,等等。验证下述程序输出结果的正确性:while(a>b)dobeginifm>=nthena:=a+1elsewhilek=hdox:=x+2;m:=n+x*(m+y)end#~程序部分代码:#include"stdio.h"#include"string.h"#defineACC-2/**************************************/#definesy_if0#definesy_then1#definesy_else2#definesy_while3#definesy_begin4#definesy_do5#definesy_end6#definea7#definesemicolon8#definee9#definejinghao10#defineS11#defineL12#definetempsy15#defineEA18#defineE019#defineplus34#definesub 35#definetimes36#definediv 37#definebecomes38#defineop_and39#defineop_or40#defineop_not41#definerop42#definelparent48#definerparent49#defineident56#defineintconst57/********************算术表达式的LR分析表********************/staticintaction1[14][9]={{-1,-1,-1,-1,2,-1,3,-1,1},{4,5,6,7,-1,-1,-1,ACC,-1},{-1,-1,-1,-1,2,-1,3,-1,8},{106,106,106,106,-1,106,-1,106,-1},{-1,-1,-1,-1,2,-1,3,-1,9},{-1,-1,-1,-1,2,-1,3,-1,10},{-1,-1,-1,-1,2,-1,3,-1,11}, {-1,-1,-1,-1,2,-1,3,-1,12},{4,5,6,7,-1,13,-1,-1,-1},{101,101,101,101,-1,101,-1,101,-1},{102,102,102,102,-1,102,-1,102,-1}, {103,103,103,103,-1,103,-1,103,-1}, {104,104,104,104,-1,104,-1,104,-1}, {105,105,105,105,105,105,105,105,-1},};/********************布尔表达式的LR分析表*********************/staticintaction2[16][11]={{1,-1,4,-1,5,-1,-1,-1,13,7,8},{-1,2,-1,101,-1,101,101,101,-1,-1,-1},{3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,102,-1,102,102,102,-1,-1,-1},{1,-1,4,-1,5,-1,-1,-1,11,7,8},{1,-1,4,-1,5,-1,-1,-1,6,7,8},{-1,-1,-1,104,-1,9,10,104,-1,-1,-1},{1,-1,4,-1,5,-1,-1,-1,14,7,8},{1,-1,4,-1,5,-1,-1,-1,15,7,8},{105,-1,105,-1,105,-1,-1,-1,-1,-1,-1},{107,-1,107,-1,107,-1,-1,-1,-1,-1,-1},{-1,-1,-1,12,-1,9,10,-1,-1,-1,-1},{-1,-1,-1,103,-1,103,103,103,-1,-1,-1},{-1,-1,-1,-1,-1,9,10,ACC,-1,-1,-1},{-1,-1,-1,106,-1,9,10,106,-1,-1,-1},{-1,-1,-1,108,-1,9,10,108,-1,-1,-1}};/********************从文件读一行到缓冲区**********************/readline(){charch1;pline=line;ch1=fgetc(cfile);while((ch1!='\n')&&(ch1!=EOF)){*pline=ch1;pline++;ch1=fgetc(cfile);}*pline='\0';pline=line;}/***********************生成四元式**************************/gen(charop1[],structaaarg11,structaaarg22,intresult1){strcpy(fexp[nxq].op,op1);fexp[nxq].arg1.sy1=arg11.sy1;fexp[nxq].arg1.pos=arg11.pos;fexp[nxq].arg2.sy1=arg22.sy1;fexp[nxq].arg2.pos=arg22.pos;fexp[nxq].result=result1;nxq++;returnnxq-1;}运行结果截图:学习体会:上课的时候,编译原理有很多地方不明白,在学习完了后对各个方面的知识精华不是不了解,通过本次实验后,我渐渐熟悉了编译程序的原理,对编译程序处理过程有了更清晰的认识,程序在词法分析,语法分析语义分析,代码生成都有了更清楚的体会,词法分析的步骤,状态栈加工过程的详细内容,以及这之中四元式的产生分析以及归约的一些内容。实验二算术表达式的扩充实验目的:学会推到LR分析表,扩充算术表达式。即:将原来的扩展成+、-、×、/。实验要求:参照算术表达式LR分析表的设计方法,设计扩充后的算术表达式LR分析表,并对原语义加工程序进行修改,加入新添加的内容。实验内容:算术表达式文法扩充如下:E—>E+E|E-E|E*E|E/E|(E)|i试根据该文法添加单词“-”、“/”的内部定义以及重新设计LR分析表,并修改语义加工程序,最后验证修改的结果。四、程序修改部分代码:#include"stdio.h"#include"string.h"#defineACC-2/**************************************/#definesy_if0#definesy_then1#definesy_else2#definesy_while3#definesy_begin4#definesy_do5#definesy_end6#definea7#definesemicolon8#definee9#definejinghao10#defineS11#defineL12#definetempsy15#defineEA18#defineE019#defineplus34#defineminus 35//增加的#definetimes36#definediv 37//增加的#definebecomes38#defineop_and39#defineop_or40#defineop_not41#definerop42//#definesy_for 43//addfor#definelparent48#definerparent49#defineident56#defineintconst57/********************************************//********************算术表达式的LR分析表********************/staticintaction1[14][9]=//修改3{{3,-1,-1,-1,-1,2,-1,-1,1},{-1,4,5,6,7,-1,-1,ACC,-1},{3,-1,-1,-1,-1,2,-1,-1,8},{-1,106,106,106,106,-1,106,106,-1},{3,-1,-1,-1,-1,2,-1,-1,9},{3,-1,-1,-1,-1,2,-1,-1,10},{3,-1,-1,-1,-1,2,-1,-1,11},{3,-1,-1,-1,-1,2,-1,-1,12},{-1,4,5,6,7,-1,13,-1,-1},{-1,101,101,6,7,-1,101,101,-1},{-1,102,102,6,7,-1,102,102,-1},{-1,103,103,103,103,-1,103,103,-1},{-1,104,104,104,104,-1,104,104,-1},{-1,105,105,105,105,-1,105,105,-1}};case'+': buf[count].sy1=plus; count++; break; case'-': //增加的 buf[count].sy1=minus; count++; break; case'*': buf[count].sy1=times; count++; break; case'/'://增加的 buf[count].sy1=div; count++; break; case':': readch(); if(ch=='=') buf[count].sy1=becomes; count++; break; case'=': buf[count].sy1=rop; buf[count].pos=5; count++; break; case';': buf[count].sy1=semicolon; count++; break;change1(intchan)//{ switch(chan) { caseident: caseintconst:return0; caseplus:return1; caseminus:return2;//added casetimes:return3; casediv:return4;//added caselparent:return5; caserparent:return6; casejinghao:return7; casetempsy:return8; }}switch(lr1) { case100:break; //S'-->E case101:E.pos=newtemp(); //E->E+E gen("+",sstack[ssp-2],sstack[ssp],E.pos+100); ssp=ssp-2; sstack[ssp].sy1=tempsy; sstack[ssp].pos=E.pos; sp1=sp1-3; break; case102:E.pos=newtemp();//E->E-E gen("-",sstack[ssp-2],sstack[ssp],E.pos+100); ssp=ssp-2; sstack[ssp].sy1=tempsy; sstack[ssp].pos=E.pos; sp1=sp1-3; break; case103:E.pos=newtemp();//E->E*E gen("*",sstack[ssp-2],sstack[ssp],E.pos+100); ssp=ssp-2; sstack[ssp].sy1=tempsy; sstack[ssp].pos=E.pos; sp1=sp1-3; break; case104:E.pos=newtemp();//E->E/E gen("/",sstack[ssp-2],sstack[ssp],E.pos+10
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 房管局合同买卖合同范本4篇
- T/ZHCA 006-2019化妆品抗皱功效测试方法
- T/ZBH 005-2018建筑用减反射镀膜玻璃
- 四川长虹智能制造技术有限公司招聘笔试题库2025
- 心理咨询师考试试卷及答案2025年
- 2025年中级法律职业资格考试试题及答案
- 2025年外汇交易与投资专业考试试题及答案
- 2025年新兴产业发展政策知识测试题及答案
- 2025年数学建模专业研究生入学考试试题及答案
- 2025年青少年心理辅导专业考研模拟试题及答案
- 折扣零售业态在社区商业中的布局策略与盈利模式研究报告
- 医院护工面试题及答案
- 高校学生资助诚信教育主题活动
- 上海市徐汇区2025届七年级生物第二学期期末教学质量检测试题含解析
- 河南中考:历史必背知识点
- 脐橙代销销售合同协议
- 肠易激综合征中西医结合诊疗专家共识(2025)解读课件
- 水利工程课件
- 灸法完整版本
- 建筑概论考试试题及答案
- 回弹法混凝土强度检测方法课件
评论
0/150
提交评论