西工大编译原理实验报告.doc

西工大编译原理实验报告.doc

ID:59131845

大小:758.00 KB

页数:12页

时间:2020-09-12

西工大编译原理实验报告.doc_第1页
西工大编译原理实验报告.doc_第2页
西工大编译原理实验报告.doc_第3页
西工大编译原理实验报告.doc_第4页
西工大编译原理实验报告.doc_第5页
资源描述:

《西工大编译原理实验报告.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、成绩编译原理实验报告学院:计算机学院班级:姓名:学号:日期:目录1实验情况概述12主要功能23软件总体结构34详细设计45实验总结55.1调试和bug修改总结55.2测试和结果55.3实验小结51实验情况概述本实验的主要任务是编写一个小型类Pascal语言的编译器。该编译器应当能够将输入的源程序文本翻译为相应的四元式,并输出符号表。实验环境:词法分析器采用flex;语法分析器采用bison;软件开发使用VisualC++6.0。功能:1.能够处理整型、实型两种类型的变量定义;2.能够识别注释;3.能够处理程序结构的定义;4.能够识别算术

2、、关系和逻辑表达式;5.能够识别常量定义;6.能够识别顺序、赋值、循环、选择、复合语句等基本的语句类型。输出结果:1.将输入的文本输出为四元式序列;2.输出符号表。2主要功能1.基本功能:根据词法分析处理说明文件(.l)和语法分析处理说明文件(.y)来识别输入的测试文件是否符合MiniPascal所规定的语法要求;若测试文件符合其语法要求,则输出程序正确运行步骤的四元式表示以及程序运行过程中所用到的的符号表;若不符合,则发生错误,程序无法运行,并提示错误信息。四元式基本形式:(op,arg1,arg2,result),其中op为一个二元

3、(也可以是一元或零元)运算符;arg1,arg2分别为它的两个运算(或操作)对象,它们可以是变量、常数或系统定义的临时变量名;运算结果将放入result中。2.扩展功能:定义了如下两类四元式:(jrop,A1,A2,p)—当关系A1ropA2成立时,转向第p四元式;(j,0,0,p)—无条件转向第p四元式。1.程序运行结果如下所示:2.3软件总体结构3.1软件包括的程序文件:ast.cast.hast_lex.cast_yacc.cast_lex.last_yacc.y3.2程序模块如下图所示:3.3各程序块之间的传递词法分析模块与语法

4、分析模块通过单词的内部码来传递信息;字符数组str1存储当前正在识别的单词。语法分析产生的四元式和符号表均存储在结构体中。4详细设计4.1数据结构四元式数据结构:structQUATERLIST{charop[6];chararg1[6],arg2[6],result[6];}QuaterList[MAXMEMBER];符号表数据结构:structVARLIST{charname[20];inttype;/*1为real0为int*/intaddr;}VarList[MAXMEMBER];表达式数据结构:structEexpr{intt

5、ype,place;union{intIv;floatRv;}Value;};其中type为2表示变量,1表示整数,Iv中存储该整数的值,0表示小数,Rv中存储该小数的值。4.2主要的算法和辅助函数voidBackPatch(intp,intt);/*用四元式序号t回填以p为首的链,将链中每个四元式的result域改写为t的*/intMerge(intp1,intp2);/*将p1和p2的两条链合并为一条,并返回新链的序号*/voidGen(charjop[],chararg1[],chararg2[],charresult[]);/*

6、根据所给参数产生一个新的四元式*/intLookUp(char*Name);/*在符号表中查找Name,若查到返回序号*/intEnter(char*Name);/*以Name为名字查符号表,若未查到,则调用Enter函数添加该项*/intEntry(char*Name);/*在符号表中添加Name新项,返回值为序号*/intNewTemp();/*产生临时变量,每次调用都定义一个新的临时变量,返回值为该变量的编*/voidChangeToString(char*dest,structEexprex);/*若所给ex为常数,则将其值变为

7、字符串,存入dest中,若所给ex为变量,则将其变量名变为字符串,存入dest中*/voidOutputQ(void);/*用于输出四元式的函数*/intyyparse();/*主语法分析函数*/voidOutputIList(void);/*输出符号表函数*/intyyerror(char*);/*错误处理函数*/4.3规则说明采用语法制导翻译方法,即根据文法中每个产生式所蕴含的语义,为其后续准备若干语义子程序,对所要完成的语义处理功能进行分析描述,在语法分析过程中,当分析器使用该产生式进行语法分析时,除完成语法分析动作外,还将调用为

8、其配备的语法分析子程序,进行相应的语义处理,完成语法翻译工作。例如这个规则:ISE:IBTStatementElse{intq=NXQ;Gen("j","0","0","-1");BackPatch($1,

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。