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

时间:2012-06-22 17:05:02
【文件属性】:

文件名称:语义分析&&编译原理实验

文件大小:5KB

文件格式:CPP

更新时间:2012-06-22 17:05:02

采用递归下降语法制导翻译法,对算术表达式、赋值语句进行语义分析并生成四元式序列

一、实验目的 通过上机实习,加深对语法制导翻译原理的理解,掌握将语法分析所识别的语法成分变换为中间代码的语义翻译方法。 二、实验要求 采用递归下降语法制导翻译法,对算术表达式、赋值语句进行语义分析并生成四元式序列。 三、实验的结果验证 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<>ch; prog[p++]=ch; }while(ch!='#'); p=0; scaner(); lrparser(); }


网友评论

  • 不错,就是写的比较乱,整理一下就可以用。
  • 代码符合实验要求,不错~
  • 还行,适合于初级入门的学习.
  • 可以运行,不过和我需求不一样
  • 可以,有一定参考价值。
  • 写得不错 但不是我想要的
  • 学习了,不过功能还比较简单
  • 可以用,就是写的太简单了···
  • 还可以 太简单了
  • 可以运行,是我要得
  • 额,我运行不行,可能是我输入的字符串不对吧,但是还是挺好的,容易理解,有参考价值
  • 非常简单的代码,不复杂,实现了语义分析的基本功能。
  • 写得很好,但不是我要找的!谢谢、、、
  • 完全符合要求,非常感谢楼主
  • 可以直接运行,程序很清晰。
  • 可运行 挺好的
  • 可运行 还不错
  • 经检测,代码无bug,非常好!
  • 代码可以运行,可以生成四元式序列。