1 / 26
文档名称:

编译语法分析实验报告.docx

格式:docx   大小:296KB   页数:26页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

编译语法分析实验报告.docx

上传人:luciferios04 2017/10/10 文件大小:296 KB

下载得到文件列表

编译语法分析实验报告.docx

相关文档

文档介绍

文档介绍:课程实验报告
课程名称: 编译原理(语法分析)
专业班级: 信息安全1001班
学号: U201014608
姓名:
指导教师: 骆婷
报告日期: 2010/11/8
计算机科学与技术学院
1、实验目的
设计并编制一个语法分析程序,加深对语法分析程序中递归下降分析方法的理解;
巩固对代码生成及报错处理等理论的认识;
培养对完整系统独立分析和设计的能力;
培养学生独立编程的能力;
2、实验要求
利用C语言编制递归下降分析程序,并对简单语言进行语法分析。
待分析的简单语法的语法
用扩充的BNF表示如下:
<程序>::=begin <语句串> end
<语句串>::=<语句>{:语句}
<语句>::=< 赋值语句>
<赋值语句>::=ID := <表达式>
<表达死>::=<项>{+<项>|-<项>}
<项>::=<因子>{*<因子>|/<因子>}
<因子>::=ID | NUM | ( < 表达式> )
语法分析程序的功能
输入单词串,以”#”结束,如果是文法正确的句子,则输出成功信息,打印“ess”,否则输出”error”
例如:
输入: begin a:=9;b:=0 end #
输出: ess
输入: begin a=9 end #
输出: error
3、词法分析程序的算法思想
算法的基本任务是从字符串中表示的源程序中识别出具有独立意义的单词符号,并通过其基本文法,正确规约到开始符号。
全局变量的设置
在此程序中,需要设置两个个全局变量: 关键字表retab[6]、当前识别的种别号syn。
其中retab中元素为“begin”“if”“then”“while”“do”“end”,在程序会扫描出标识符时,首先查关键字表。如果能找到匹配的单词,则该单词为关键字,否则为一般标识符。
syn用于每一步扫描中scanner 的返回值。在整个语法分析程序中均需要使用该全局变量。
主程序main算法流程图
开始
读取字符串到inputString
int i =0;输入字符串长度inputLength

Scanner()


syn == -1
Y
N
lrparser()
结束



扫描子程序scanner()的算法流程图
调用
ch =当前第一个字符


字母
当前字符串
数字运算符/界符
syn=种别号
当前数字
syn=相应的种别号
是否关键字

其他符号
错误
N
syn=11
Y
返回
lrparser()的算法流程图
调用
syn = 1
N
Y
scanner()
yucu()
syn == 6
N
Y
scanner()
syn == 0
N
Y
出错处理
成功,打印“ess”
语句串分析程序yucu()的算法流程图
调用
statement()
syn ==26(;)
N
scanner()
出错处理
Y
statement语句分析算法流程图
调用
syn ==26(;)
scanner()
syn ==18(:=)


scanner()

出错处理
expression()
expression表达式分析算法流程图
调用
term()
是否+ 或-
N
Y
scanner()
出错处理
term
term分析函数算法流程图
调用
factor()
是否* 或/
N

出错处理
Scanner()
Y
factor分析函数算法流程图
调用
是否标识符
Y
N
是否整常数
Y
N
是否(
Y
scanner() ; expression()
出错处理
是否)
scanner() ;返回
N
Y
4、实验结果
输入begin a:=9; x:= 2*3 end # 结果如下
输入begin a=9 end # 结果如下
5、实验感想及总结
本次实验和第一实验一样,框架已经给出,算法已经用类C语言写出,我们需要做的是将第一个实验和第二个实验很好的结合起来。由于第一次实验中不是按照书中的框架写出的代码,因此在第二次实验时传递参数时出现了问题,最后不得不利用全局变量syn解决。通过两次编译原理的实验,更加理解了词法语法分析的过程,促进了对课程的进一步学****br/>6、源代码
#include <>
#include<>
#include<>
#include