资源描述:
《C-词法扫描器及语法分析器实现.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、编译原理课程设计报告课题名称:C-词法扫描器及语法分析器实现提交文档学生姓名:余春提交文档学生学号:0943041287同组成员名单:无指导教师姓名:张兵指导教师评阅成绩:指导教师评阅意见:..提交报告时间:2012年5月23日52目录1目标31.1总纲31.2词法分析31.2语法分析42分析与设计42.1系统设计思想………………………………………………………………………………………………………342.1.1词法扫描器的设计想……………………………………………………………………………….…….…32.1.2词法分析流程图………………………………………………………………
2、…………………….…….…32.2程序流程图32.3各文件或函数的设计说明32.3.2状态机的定义...……..…………………………………………………………………………….…32.3.2词法的函数..…………..……..……..…………………………………………………………….…32.3.2语法树的初始化…………..……..……..…………………………………………………………….…32.3.2语法输的输出函数………..……..……..…………………………………………………………….…33.1测试数据33.2测试结果分析34总结54.1收获34.2特色54.2不足55源代
3、码清单852C-词法扫描器及语法分析器实现1.课程设计目标1.1总纲:在学习《编译原理》课程过程中,结合各章节的构造编译程序的基本理论用C语言描述及上机调试,实现一个C-Minus小编译程序(包括词法分析,语法分析),使自己将理论与实际应用结合起来,受到软件设计等开发过程的全面训练,从而提高学生软件开发的能力。1.2词法分析器:1.2.1具备预处理功能:将不翻译的注释等符号先滤掉,只保留要翻译的符号串,用DFA状态机将程序的各个token分成不同的状态并描述出来,并形成保留字,专用符号,其他标记ID和NUM,空格等即对下列词法进行词法扫描:关键字:ELSE,IF,IN
4、T,RETURN,VOID,WHILE,专用符号:+,-,*,,<,<=,>,>=,==,!=,=,;,,,(,),[,],{,}.ID与NUM:ID=letterletter*letter=a
5、..
6、z
7、A..
8、Z
9、NUM=digitdigit*digit=0
10、..
11、9空格与注释:t, ,以及空格“”,/*…*/1.2.3返回(种别码,属性值):能够标识出当前扫描的token属于什么;如在intgcd(intx)中必须能够分辨出int是保留字,而gcd是ID;同理intx是一样的1.2.4能够检测出程序的词法错误:对于超出了c-语言规定的词法结构都要进行报
12、错,如inttt;由于不存在这个词法因此需要报错;再如inttt99,其中的tt99在c语言里面是作为的一个正确的标识符,但是在c-语言里面,标识符只能全部是字母组成的,因此也需要报错。1.3语法分析器:1.3.1能够根据文法分析出语法树用学习过的自底向上或自顶向下的分析方法等,实现对表达式、各种说明语句、控制语句进行语法分析。若语法正确,则用语法制导翻译法进行语义翻译;生成并打印出语法树;若语法错误,要求指出出错性质和出错位置(行号)。C-的BNF如下:1.program→declaration-list程序由一组声明列表开头,所有的变量或过函数必须先声明再使用2.
13、declaration-list→declaration-listdeclaration
14、declaration52声明列表或者递归的定义为声明列表后跟一个声明或者定义为仅一个声明3.declaration→var-declaration
15、fun-declaration一个声明可以是一个变量声明或者一个函数声明,声明即定义4.var-declaration→type-specifierID;
16、type-specifierID[NUM];一个变量声明可以定义为一个类型符号后跟一个标识符或者定义为一个数组变量5.type-specifier→int
17、voidC-只有int
18、和void两种变量类型6.fun-declaration→type-specifierID(params)
19、compound-stmt一个函数声明定义为一个类型符号后跟一个标识符后跟一组由小括号括起来的形参或者定义为一组复合语句7.params→param-list
20、void形参定义为形参列表或者定义为void类型(无形参)8.param-list→param-list,param
21、param形参列表或者递归的定义为形参列表后跟一个逗号后跟一个形参或者定义为单个形参9.param→type-specifierID
22、type-specifierID[]