语法分析与中间代码生成编译报告.doc
《语法分析与中间代码生成编译报告.doc》由会员分享,可在线阅读,更多相关《语法分析与中间代码生成编译报告.doc(9页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、编译原理综合训练专业计算机科学与技术学生姓名王海波班级B计算机094学号421指导教师皋军完成日期2021年12月30日信息工程学院课程设计任务书课题名称?编译原理?课程设计完成时间指导教师皋军学生姓名王海波班级B计算机094总体设计要求题目:语法分析与中间代码产生器总体设计要求: 课程设计内容共给定4个题目,每个学生按照课程设计要求,在规定的一周时间内,选择一个独立完成涉及内容:语法分析生成中间代码课程设计成果1、课程设计报告书一份2、源程序清单一份3、成果使用说明书一份目录一、 课设要求用C语言对下述文法和单词表定义的语言设计编制一个编译器。1单词符号及种别表单词符号种别编码单词值main
2、1int 2float3double4char5if 6else 7do8while9l(l|d)*10内部字符串 ( +|-| ) d*(.dd* | )( e ( +|-| ) dd*|) 20二进制数值表示=21+22- 23* 24/ 25(26)272829,30;3132=3334=35=36!=372语法构造定义 := main() := /程序用括号括起来:=;:=|:=ID= /赋值语句用=号:=if /条件怎么没有括号,囧自己加1个:=do while := /没有布尔运算,还算简单 := +|- := *|/ :=ID|num|()num:= ( +|-| ) 数字*(.
3、数字数字* | )( e ( +|-| ) 数字数字*|)ID:=字母(字母|d数字)*字母:=a|b|c|z|A|B|C|Z数字:=0|1|2|9 := |=|=|!=二、 总体设计思想采用递归下降自上而下的语法制导翻译法。三、 详细算法设计在前两次试验的根底上改良。词法分析程序 语法分析程序 语义分析程序 编译器。不断完善,不断改良。渐变的过程。四、 流程框图图 I 主函数示意图图 II 递归下降分析程序示意图图 III 语句块分析示意图图 IV 语句串分析示意图图 V 语句分析示意图五、 函数相关说明1. 所有函数一览void scanner(); /扫描void lrparser();
4、 void staBlock(int *nChain); /语句块void staString(int *nChain); /语句串void sta(int *nChain); /语句void fuzhi(); /赋值语句void tiaojian(int *nChain); /条件语句void xunhuan(); /循环语句char* E(); /Expresiion表达式char* T(); /Term项char* F(); /Factor因子char *newTemp(); /自动生成临时变量void backpatch(int p,int t); /回填int merge(int p
5、1,int p2); /合并p1和p2void emit(char *res,char *num1,char *op,char *num2); /生成四元式2. void emit(char *res,char *num1,char *op,char *num2)该函数的功能是生成一个三地址语句送到四元式表中。void emit(char *res,char *num1,char *op,char *num2)strcpy(fourComq.result,res);strcpy(fourComq.arg1,num1);strcpy(fourComq.opera,op);strcpy(fourC
6、omq.arg2,num2);q+;四元式表中的构造如下:structchar result10; /字符串字符数组char arg110; /操作数1char opera10; /运算符char arg210; /操作数2fourCom20; /构造体数组3. char *newTemp()该函数的功能是会动一个新的临时变量,临时变量名产生的顺序是T1,T2,T3,.char *newTemp()char *p;char varTemp10;p=(char *)malloc(10);kk+;itoa(kk,varTemp,10); /整数转换为字符串strcpy(p+1,varTemp);p
7、0=T; /字符串前加T,便于识别return p;4. int merge(int p1,int p2)该函数的功能是将以P1,P2为链首的两条链合并成一条链,返回时的函数值作为合并后的链首。int merge(int p1,int p2) /合并p1和p2char circle,nResult;if(p2=0)nResult=p1;elsenResult=circle=p2;while(atoi(fourComcircle.result) /四元式第四个分量不为0circle=atoi(fourComcircle.result); /strcpy(fourComcircle.result,
8、p1);sprintf(fourComcircle.result,%s,p1);/目的是用p1的值覆盖0return nResult; /p2是头,p1覆盖0,接在p2后边5. void backpatch(int p,int t)该函数的功能是把P所链接的每个四元式的第四区段result段都回填t。void backpatch(int p,int t) int w,circle=p;while(circle) /circle不为0的时候w=atoi(fourComcircle.result); /四元式circle第四分量内容/strcpy(fourComcircle.result,t);
9、/把t填进四元式circle的第四分量sprintf(fourComcircle.result,%d,t);circle=w; /w记录的是链条上下一个四元式,移动!return;6. void fuzhi()该函数的功能是对赋值语句进展分析。void fuzhi() /赋值语句只有1个操作数char res10,num10; /num操作数if(syn=10) /字符串strcpy(res,token); /结果scanner();if(syn=21) /=scanner();strcpy(num,E();emit(res,num,=,);elseprintf(缺少=号n);7. void
10、tiaojian(int *nChain)该函数的功能是对条件语句进展分析。/-if()void tiaojian(int *nChain)char res10,num110,num210,op10;int nChainTemp;/-if(syn=6) /ifscanner();/strcpy(num1,E();if(syn=26) /(scanner();strcpy(num1,E();if(syn=32) switch(syn)case 32:strcpy(op,);break;case 33:strcpy(op,=);break;case 34:strcpy(op,);break;cas
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语法分析 中间 代码 生成 编译 报告
限制150内