小型编译程序的构造研究.doc
文本预览下载声明
小型编译程序的构造研究
小型编译程序的构造研究摘要: 掌握计算机语言的词法分析程序的开发方法以及计算机语言的语法分析程序设计与属性文法应用的实现方法。培养“计算思维能力”——模型化、抽象思维能力、逻辑思维能力以及算法设计与分析能力,程序设计与实现能力和计算机系统的认知、分析…
2012最新大学毕业设计论文结束语范文 现在又很多大四的同学都在找毕业论文结束语的文章,现在我发7篇毕业论文结束语范文供打下参考,免去毕业论文结束语这么写的烦恼!这个毕业论文谢词,不是毕业论文结束语! 结束语一:经过了两个多月的学习和工作,我终于完成…
8、小松树和大松树一、激趣导入。1、同学们喜欢听歌吗?今天老师带来了一首好听的儿歌,想不想听一听?(p播放儿歌《小松树》)2、这首歌里唱了什么?(指名说)出示词语:松树,谁能把它的念准了?(指名读)3、请你们举起右手,和老师一起写写这个松字,(教师范…
小型编译程序的构造研究
摘要: 掌握计算机语言的词法分析程序的开发方法以及计算机语言的语法分析程序设计与属性文法应用的实现方法。培养“计算思维能力”——模型化、抽象思维能力、逻辑思维能力以及算法设计与分析能力,程序设计与实现能力和计算机系统的认知、分析、设计和应用能力。
关键字:语法分析 计算机系统
1实现的功能
编制一个能够分析证书、标示符、主要运算符和主要关键字的词法分析程序。
2需求分析
给出类扩充的样本S语言的词法和语法定义,并根据对应的语法定义写出一些属性文法和语法制导。根据词法和语法的定义,构造一个编译程序,它主要可以完成如下功能:
1、读入某个已经编辑好的类S语言源程序文件。
2、语法分析器将产生的二元组作为输入,进行语法分析,同时检查语法错误;
3、在语法分析同时,利用属性文法和语法制导技术,产生具体的语意动作,并对符号表进行操作;
4、根据语义动作产生整个源程序的四元式序列;
5、将产生的四元式序列连同符号表一起输出,作为编译程序的最终输出结果;
6、对最后的代码优化和目标代码生成要有所考虑,必须留有一定的接口供以后扩展;
7、增大程序的可移植性,努力做到整个系统方便移植。
3问题及解决方法
1. 本次的实验我们采用了LL(1)文法,做的时候,首先求出项目集规范族,然后根据项目集规范族画出状态转移图,进而根据状态转移图形成分析表。
2.为打出3 地址码有两种方法,一是利用回填技术,二是先构造出语法树,之后再通过自顶向下遍历这棵语法树打出3 地址码。我采用了第2 种方法。
4详细设计
4.1函数子程序
1)char *newTemp()
该函数的功能是会动一个新的临时变量,临时变量名产生的顺序是T1,T2,T3,….
2)int merge(int p1,int p2)
该函数的功能是将以P1,P2为链首的两条链合并成一条链,返回时的函数值作为合并后的链首。
3)void backpatch(int p,int t)
该函数的功能是把P所链接的每个四元式的第四区段(result段)都回填t。
4)void fuzhi()
该函数的功能是对赋值语句进行分析。
5)void tiaojian(int *nChain)
该函数的功能是对条件语句进行分析。
6)void xunhuan()
该函数的功能是对循环语句进行分析。
//::=do while
void xunhuan()
char res[10],num1[10],num2[10],op[10];
int nChainTemp;
if(syn==8) //do {
nnc=nextq; //记住if语句位置,emit之后nextq就变了
//emit(“0”,”if”,num1,”goto”);
scanner(); staBlock(nChainTemp); //语句块 if(syn==9) //while { scanner(); 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; case 35: strcpy(op,”backpatch(nnb,nnc);
nna=nextq;
emit(“
显示全部