电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

编译原理实验:语义分析实验

编译原理实验:语义分析实验_第1页
1/9
编译原理实验:语义分析实验_第2页
2/9
编译原理实验:语义分析实验_第3页
3/9
实验四:语义分析 一.实验目的:通过上机实习,加深对语法制导翻译原理的理解,掌握将语法分析所识别的语法成分变换为中间代码的语义翻译方法 二. 实验要求:采用的是递归下降语法制导翻译法,对算术表达式,赋值语 进行语义分析并生成四元式序列。 1. 实验的输入和输出分别为以下: 输入是语法分析后提供的正确的单词串,输出为三地址指令形式的四元式序列。 例如:对于语句串 begin a:=2+3*4;x:=(a+b)/c end # 输出的三地址指令如下所示: (1) t1=3*4; (2) t2=2+t1; (3) a=t2; (4) t3=a+b; (5) t4=t3/c; (6) x=t4; 2. 实验算法的思想为: (1) 设置语义分析过程 这其中用到的几个重要的函数的功能和代码如下面所列出的: 1. emit (char *result ,char *ag1,char *op,char *ag2) 该函数的功能是生成一个三地址语句送到四元式表中。 四元式表的结构如下: Struct { Char result[8]; Char ag1[8]; Char op[8]; Char ag2[8]; }quad[20]; 2char *newtemp() 该函数的功能是回送一个新的变量名,临时变量的名称产生的顺序依次为T1, T2 ,…….. Char *newtemp() { Char *p; Char m[8]; P=(char *)malloc(8); K++; Iota(k,m,10); Strcpy(p+1,m); P[0]=’t’; Return (p); } (2) 主程序的示意图如图所示: 设置初值调用Scanner()函数调用lrparser函数()输出四元组结束 (3) 函数lrparser 在原来语法分析的基础上插入相应的语义分析动作,将输入串翻译成四元式序列,在实验中我们仅仅所作的是对表达式和赋值语句进行翻译。 三,实验程序源码代码如下: #include "stdio.h" #include "string.h" #include "ctype.h" char token[20] ; char prog[100]; char ch; char *rwtab[6]={"begin","if","then","while","do","end"}; int syn,p,m,n,sum; #define STACK_SIZE 100 int compute(int x,char c,int y); int stack_num[STACK_SIZE]; int num_top=-1; bool notfull_num() { if(num_top==STACK_SIZE) return false; else return true; } void push_num(int value) { if(notfull_num()) { num_top++; stack_num[num_top]=value; } } void pop_num() { num_top--; } int num_top_value() { int m=stack_num[num_top]; // printf("sing=====%d\n",m); return m; } bool empty_num() { if(num_top...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

编译原理实验:语义分析实验

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部