编译原理实验报告(词法分析)

编译原理实验报告(词法分析)

ID:34101101

大小:304.68 KB

页数:12页

时间:2019-03-03

编译原理实验报告(词法分析)_第1页
编译原理实验报告(词法分析)_第2页
编译原理实验报告(词法分析)_第3页
编译原理实验报告(词法分析)_第4页
编译原理实验报告(词法分析)_第5页
资源描述:

《编译原理实验报告(词法分析)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、组员:张勇崔杰崔鑫孟凡杨徐强《编译原理》实验报告完成时间:2010年5月4日一、实验题目按递归下降方式设计编译程序,实现多行表达式的<表达式序列>的文法语言的编译执行。二、实验成员及贡献组长:张勇00713001(编译程序测试,撰写实验报告)组员:崔杰00713047(系统设计,代码的编辑以及测试)崔鑫00713014(编译程序词法分析的设计与实现,编译程序测试)孟凡杨00713027(编译程序语法分析的设计与实现,编译程序测试)徐强00713056(编译程序错误处理的实现,编译程序测试)三、实验内容有表示多行表达式的<表达式序列>文

2、法如下:<表达式序列>-><表达式>↙<表达式序列>|<表达式>↙↙<表达式>->[<变量>=][+|-]<项>{(+|-)<项>}<项>-><因子>{(*

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

4、cos

5、tan

6、exp其中的变量无需定义且其作用域为第一次赋值处至最后。试按递归下降方式设计其编译程序,生成PL/0栈式指令代码,然后解释执行。要求:1)将编译和解释执行分成完全独立的两个阶段;2)对栈式指令进行适当扩充,使之能处理标准函数的调用;

7、3)剔除本题目不需要的PL/0栈式指令,并说明理由;1组员:张勇崔杰崔鑫孟凡杨徐强4)简化PL/0运行栈,使之满足本题目要求既可;5)注意<表达式>定义中的可选项[变量=]引起的歧义性:如a=1+2与a+2,前一个a属于<表达式>,而后一个a属于<项>,思考如何解决;6)以“表达式↙目标码序列↙结果↙”方式输出运行结果;7)设计一个测试,使之能充分测试你的实现;8)对正确列出的目标码、执行并按适当方式演示运行栈的变化,计算出值;对错误的指出其出错位置和错误性质。四、系统设计编译过程采用一趟扫描的方式,以语法分析程序为核心,词法分析程序

8、和代码生成程序都作为一个独立的过程,当语法分析需要读单词就调用词法分析程序,而当语法分析正确需生成相应的目标代码时,则调用代码生成程序。此外,用表格管理程序建立变量、常量和过程标识符的说明与引用之间的信息联系;用出错处理程序对词法和语法分析遇到的错误给出在源程序中出错的位置和错误性质;当源程序编译正确时,PL/0编译程序自动调用解释执行程序,对目标代码进行解释执行,并按用户程序要求输入数据和输出运行结果。本程序编译和解释执行的结构图如下所示:源程序2组员:张勇崔杰崔鑫孟凡杨徐强1、编译程序词法分析的设计与实现运算符:如:+、-、*、/

9、、=等标识符:用户定义的变量名、常数名常数:如:10、25、100等整数界符:如:‘;’、‘(’、‘)’等标准函数:如sin,cos,tan等。词法分析完成的功能1.识别标识符2.拼数3.拼复合词4.输出源程序2、编译程序语法分析的设计与实现递归子程序法:对应每个非终结符语法单元,编一个独立的处理过程(或子程序)。语法分析从读入第一个单词开始,由非终结符<程序>(即开始符)出发,沿语法描述图箭头所指出的方向进行分析。当遇到非终结符时,则调用相应的处理过程,从语法描述图看,也就进入了一个语法单元,再沿当前所进入的语法单元所指箭头方向继续

10、进行分析。当遇到描述图中是终结符时,则判断当前读入的单词是否与图中的终结符相匹配,若匹配,再读取下一个单词继续分析。遇到分支点时,将当前的单词与分支点上多个终结符逐个相比较,若都不匹配时可能是进入下一个非终结符语法单位或是出错。3组员:张勇崔杰崔鑫孟凡杨徐强五、测试与执行1、两个数的加减乘除单运算100+22;上机操作和运行结果4组员:张勇崔杰崔鑫孟凡杨徐强25-66;56*3;100/3;100/0;2、两个数的加减乘除混合型运算2+3-5*6/2输出-105组员:张勇崔杰崔鑫孟凡杨徐强3、带括号的混合运算(3+4)*5/2+4输出

11、21.54、带sin,cos,tan三角函数的混合运算2+8/4-sin30输出3.500016组员:张勇崔杰崔鑫孟凡杨徐强5、在读文件中进行多步表达式的计算a=15+15b=a*2+60c=4*b-8+sinaa=30;b=120;c=232.5;6、在读文件中进行多步表达式的计算a=4*sin30/tan45*cos60b=6*(41-24)/(58+20)c=a+b7组员:张勇崔杰崔鑫孟凡杨徐强六、异常处理及缺少的功能1、对语法错误的两种处理方法:(1)对于易于校正的错误,如丢了逗号,分号等,指出出错位置,加以校正,继续进行分析

12、。(2)对于难于校正的错误,给出错误的位置与性质,跳过后面的一些单词,直到下一个可以进行正常语法分析的语法单位。2、测试中异常处理(1)表达式缺左括号(右括号)。例:((1+2)(2+1))8组员:张勇崔杰崔鑫孟凡杨徐强

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

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

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