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

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

ID:40503776

大小:36.97 KB

页数:14页

时间:2019-08-03

河北工业大学语义分析实验报告_第1页
河北工业大学语义分析实验报告_第2页
河北工业大学语义分析实验报告_第3页
河北工业大学语义分析实验报告_第4页
河北工业大学语义分析实验报告_第5页
资源描述:

《河北工业大学语义分析实验报告》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、实验三语义分析程序实现一、实验设计在实现词法、语法分析程序的基础上,编写相应的语义子程序,进行语义处理,加深对语法制导翻译原理的理解,进一步掌握将语法分析所识别的语法范畴变换为某种中间代码(四元式)的语义分析方法。基本实验题目:对文法G2[<算术表达式>]中的产生式添加语义处理子程序,完成运算对象是简单变量(标识符)和无符号数的四则运算的计值处理,将输入的四则运算转换为四元式形式的中间代码。语法制导翻译模式是在语法分析的基础上,增加语义操作来实现的,实际上是对前后文无关文法的一种扩展。一般而言,首先需要根据进行的语义分析工作,完成对给定文法的必要拆分和语义动作的编写

2、,从而为每一个产生式都配备相应的语义子程序,以便在进行语法分析的同时进行语义解释。即在语法分析过程中,每当用一个产生式进行推导或归约时,语法分析程序除执行相应的语法分析动作之外,还要调用相应的语义子程序,以便完成生成中间代码、查填有关表格、检查并报告源程序中的语义错误等工作。每个语义子程序需指明相应产生式中各个符号的具体含义,并规定使用该产生式进行分析时所应采取的语义动作。这样,语法制导翻译程序在对源程序从左到右进行的一遍扫描中,既完成语法分析任务,又完成语义分析和中间代码生成方面的工作。本实验要求从编译器的整体设计出发,重点通过对实验二中语法分析程序的扩展,完成一

3、个编译器前端程序的编写、调试和测试工作,形成一个将源程序翻译为中间代码序列的编译系统。二、程序代码在词法分析和语法分析的基础上,完成了语义的分析,同样采用了头文件的形式,在VC++6.0中运行#include#include#include#include#include#include"cifa.h"#include"fenxibiao.h"#definePL15//+#defineMI16//-#defineMU17#defineDI18#defineacc100#def

4、ineMAXState20#defineNUMBER9//表达式的个数#defineMAXTEMP10//最多临时变量的个数intState[MAXState];//状态栈inti=0;intCURRENTSTATE=0;//标识当前状态intLENGTH[NUMBER]={1,3,3,1,3,3,1,3,1};//表达式右边的长度intlength;intindex;//索引intYes=0;//判断是否结束inttag=0;//判断是否需要调用词法程序//externchar*cifa();doublee1,t4,f7;//整形chare12[20],t42[2

5、0],f72[20];//字符型intTEMP[MAXTEMP];inttemp=0;intbiaoshifu=0;FILE*fp;voidREPORT_ERROR(){Yes=1;longf1=ftell(fp);charch=fgetc(fp);fseek(fp,-1,1);printf("语法错误,第%d个字符'%C'处",f1,ch);}voidAccept(){Yes=1;//printf("语法分析成功");}intINDEX(chara)//获取当前字符串对应的索引{inti;switch(a){case'E':i=8;return(i);br

6、eak;case'T':i=9;return(i);break;case'F':i=10;return(i);break;default:REPORT_ERROR();return(0);break;}}voidGen(inta,doublei1,doublei2,intt)//输出四元式{switch(a){casePL:printf("(+,%g,%g,%d)",i1,i2,t);break;caseMI:printf("(-,%g,%g,%d)",i1,i2,t);break;caseMU:printf("(*,%g,%g,%d)",i1,i2,t

7、);break;caseDI:printf("(/,%g,%g,%d)",i1,i2,t);break;default:break;}}voidyuyi(intn)//语义子程序{switch(n){case1:{temp++;//产生临时变量,Gen(PL,e1,t4,temp);e1=temp;break;}case2:{temp++;//产生临时变量,TEMP[temp]Gen(MI,e1,t4,temp);e1=temp;break;}case3:{e1=t4;break;}case4:{temp++;Gen(MU,t4,f7,temp);t4=te

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

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

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