《编译原理》实验报告-编写编译程序实现多行表达式的表达式序列的文法语言的编译执行.doc

《编译原理》实验报告-编写编译程序实现多行表达式的表达式序列的文法语言的编译执行.doc

ID:61005452

大小:273.00 KB

页数:15页

时间:2021-01-19

《编译原理》实验报告-编写编译程序实现多行表达式的表达式序列的文法语言的编译执行.doc_第1页
《编译原理》实验报告-编写编译程序实现多行表达式的表达式序列的文法语言的编译执行.doc_第2页
《编译原理》实验报告-编写编译程序实现多行表达式的表达式序列的文法语言的编译执行.doc_第3页
《编译原理》实验报告-编写编译程序实现多行表达式的表达式序列的文法语言的编译执行.doc_第4页
《编译原理》实验报告-编写编译程序实现多行表达式的表达式序列的文法语言的编译执行.doc_第5页
资源描述:

《《编译原理》实验报告-编写编译程序实现多行表达式的表达式序列的文法语言的编译执行.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、《编译原理》实验报告———编写编译程序实现多行表达式的<表达式序列>的文法语言的编译执行组长:组员:一、实验项目名称:有表示多行表达式的<表达式序列>文法如下:<表达式序列>-><表达式>↙<表达式序列>|<表达式>↙↙<表达式>->[<变量>=][+|-]<项>{(+|-)<项>}<项>-><因子>{(*

2、/)<因子>}<因子>-><无符号实数>|<变量>|<标准函数>‘(’<表达式>‘)’|‘(’<表达式>‘)’<标准函数>->sin

3、cos

4、tan

5、exp其中的变量无需定义且其作用域为第一次赋值处至最后。

6、试按递归下降方式设计其编译程序,生成PL/0栈式指令代码,然后解释执行。二、实验要求:·将编译和解释执行分成完全独立的两个阶段;·对栈式指令进行适当扩充,使之能处理标准函数的调用;·剔除本题目不需要的PL/0栈式指令,并说明理由;·简化PL/0运行栈,使之满足本题目要求既可;·注意<表达式>定义中的可选项[变量=]引起的歧义性:如a=1+2与a+2,前一个a属于<表达式>,而后一个a属于<项>,思考如何解决;·以“表达式↙目标码序列↙结果↙”方式输出运行结果;·设计一个测试,使之能充分测试你的实现;·对正确列出

7、的目标码、执行并按适当方式演示运行栈的变化,计算出值;对错误的指出其出错位置和错误性质三、设计概述:·实现平台:VC++6.0·运行平台:xindowsxp四、结构设计说明:结构图:编译系统总体流程图五、具体实现过程:1、词法分析(斯琴)词法分析子程序名为getsym,功能是从源程序中读出一个单词符号,把它的信息放入全局变量sym,值放入id中,语法分析需要单词时,直接从变量中获得。getsym过程通过反复调用getch从源程序中获取字符,并把它们拼成单词。getch过程中使用了行缓存区技术。(每次读入一行,存

8、入line缓存区,line被getsym取空后再读一行。)提高了程序运行效率。词法分析器的分析过程:调用getsym时,它通过getch从源程序中获得一个字符。如果这个字符开头是字母,则继续获取字符或数字,最终可以拼成一个单词,查保留字表,如果查到为保留字,则把sym变量赋成相应的保留字类型值;如果没有查到,则这个单词应是一个用户自定义的标识符(可能是变量名,常量名),把sym置为ident,把这个单词存入id变量。查保留字表时使用了二次法查找以提高效率。如果getch获取的字符是数字,则继续用个getch获取

9、数字,并把它们拼成一个整数,然后把sym置为number,并把拼成的数值放入num变量。取字符过程:2、语法分析(宗华):表达式序列文法为:语法分析子程序分析:  语法分析子程序采用了自顶向下的递归子程序法,语法分析同时也根据程序的语意生成相应的代码,并提供了出错处理的机制。语法分析主要由表达式处理过程(expression)、项处理过程(term)、因子处理过程(factor)构成。这些过程在结构上构成一个嵌套的层次结构。除此之外,还有出错报告过程(error)、代码生成过程(gen)、登录名字表过程(ent

10、er)、查询名字表函数(position)以及列出类PCODE代码过程(listcode)作过语法分析的辅助过程。表达式、项、因子处理:  根据PL/0语法可知,表达式应该是由正负号或无符号开头、由若干个项以加减号连接而成。而项是由若干个因子以乘除号连接而成,因子则可能是一个标识符或一个数字,或是一个以括号括起来的子表达式。根据这样的结构,构造出相应的过程,递归调用就完成了表达式的处理。把项和因子独立开处理解决了加减号与乘除号的优先级问题。在这几个过程的反复调用中,始终传递fsys变量的值,保证可以在出错的情况

11、下跳过出错的符号,使分析过程得以进行下去。以下是我们给出对表达式序列文法的理解,则:(1).表达式序列为多个表达式的集合.(2).表达式由项组成,或者可以有多个项作加法运算构成(3).项是由因子或者因子作乘法运算构成(4).因子是无符号实数,变量,标准函数,亦或递归表达式的定义3、语义分析(宗华):表达式文法的语义分析主要是:其中的变量无需定义且其作用域为第一次赋值处至最后。4、目标代码结构和代码生成(辛敏):表达式序列编译程序不仅完成通常的词法分析、语法分析,而且还产生中间代码和“目标”代码。目标代码放在一个

12、固定的存贮数组code中。目标代码结构litnum:将常数值取到栈顶opr1:栈顶元素取反opr2:次栈顶与栈顶相加,退两个栈元素,结果值进栈opr3:次栈顶减去栈顶,退两个栈元素,结果值进栈opr4:次栈顶乘以栈顶,退两个栈元素,结果值进栈opr5:次栈顶除以栈顶,退两个栈元素,结果值进栈stoi:将栈顶内容送入某变量单元中sin_:将栈顶计算sincos_:将栈顶计算costan_

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

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

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