一、实验目的 通过上机实习,加深对语法制导翻译原理的理解,掌握将语法分析所识别的语法成分变换为中间代码的语义翻译方法。 二、实验要求 采用递归下降语法制导翻译法,对算术表达式、赋值语句进行语义分析并生成四元式序列。 三、实验的结果验证 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.自己任意给出一语句串,输出四元式序列。 要求:将上述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]; (2) char *newtemp() 该函数回送一个新的临时变量名,临时变量名产生的顺序为T1,T2,… char *newtemp(void) {char *p; char m[8]; p=(char *)malloc(8); k++; itoa(k,m,10); strcpy(p+1,m); p[0]=’t’; return(p); } 2、函数lrparser 在原来语法分析的基础上插入相应的语义动作:将输入串翻译成四元式序列。在实验中我们只对表达式、赋值语句进行翻译。 五、语义分析程序的C程序。 #include #include #include #include struct {char result[12]; char ag1[12]; char op[12]; char ag2[12]; }quad; char prog[80],token[12]; char ch; int syn,p,m=0,n,sum=0,kk; //p是缓冲区prog的指针,m是token的指针 char *rwtab[6]={"begin","if","then","while","do","end"}; void scaner(); char *factor(void); char *term(void); char *expression(void); int yucu(); void emit(char *result,char *ag1,char *op,char *ag2); char *newtemp(); int statement(); int k=0; void emit(char *result,char *ag1,char *op,char *ag2) { strcpy(quad.result,result); strcpy(参数设置); strcpy(quad.op,op); strcpy(quad.ag2,ag2); cout<
1
“精确制导”网课习题答案,适合需要选修该课的如人员作为学习的参考
2021-11-05 12:26:23 30KB 网络课习题答案
1
MATLAB仿真,将DWA输出的位置点与用L1制导算法到达,实现路劲规划与避障
2021-10-13 22:02:50 13KB MATLAB 路径规划
1
利用比例制导方法来模拟导引头的运动轨迹。
内含有matlab导弹制导系统仿真代码和教学视频
2021-09-22 15:02:19 24.32MB matlab
2021-2027全球与中国激光制导车市场现状及未来发展趋势
2021-09-08 18:06:19 722KB
1
目前最清晰的雷达制导方面的专注,有标签,便于阅读,里面的文字和图片都是超级清晰的,书的原价是68元,这个pdf文件很超值。
2021-08-31 11:06:13 49.77MB 制导雷达技术
1
行业-电子政务-基于TRIZ的变电设备状态检修制导方法.zip
2021-08-30 18:01:39 893KB 行业-电子政务-基于TRIZ的变
matlab中存档算法代码聚乙二醇 制导两级火箭的动力显式制导算法 这是我根据此matlab代码改编的python中强大的显式制导算法()的实现。
2021-08-27 08:53:20 20KB 系统开源
1