编译原理课程设计--c-编译器词法分析与语法分析的实现

编译原理课程设计--c-编译器词法分析与语法分析的实现

ID:11136473

大小:409.50 KB

页数:43页

时间:2018-07-10

编译原理课程设计--c-编译器词法分析与语法分析的实现_第1页
编译原理课程设计--c-编译器词法分析与语法分析的实现_第2页
编译原理课程设计--c-编译器词法分析与语法分析的实现_第3页
编译原理课程设计--c-编译器词法分析与语法分析的实现_第4页
编译原理课程设计--c-编译器词法分析与语法分析的实现_第5页
资源描述:

《编译原理课程设计--c-编译器词法分析与语法分析的实现》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、编译原理课程设计报告课题名称:C-编译器词法分析与语法分析的实现提交文档学生姓名:黄臻旸提交文档学生学号:1043041227同组成员名单:无指导教师姓名:金军指导教师评阅成绩:指导教师评阅意见:..提交报告时间:2013年6月5日编译原理课程设计报告11、课程设计目标32、分析与设计32.1、说明所用的方法:32.2、系统总图:32.2.1、scanner部分:32.2.2、parse部分:52.2.3、代码设计说明73、程序代码实现103.1、获取输入部分(在main.c中):103.2、词法分析部

2、分(在scan.c中):103.3、语法分析部分(在parse.c中):153.4、输出与结点的建立(在util.c中)293.5、TokenType、treeNode与结点类型的声明(在globals.h中)344、测试结果365、总结365.1、收获365.2、不足361、课程设计目标本次实验,本C-编译器主要设计并且实现了C-编译器的词法分析功能与语法分析功能。2、分析与设计2.1、说明所用的方法:各部分的实现方法(scanner:手工实现、Lex;parser:递归下降、LL(1)、LR(0)、

3、SLR(1)、LR(1)、LALR(1)、Yacc),所用编程语言实现内容所用的实验方法所用编程语言scanner手工实现C语言parse递归下降C语言2.2、系统总图:2.2.1、scanner部分:2.2.1.1、实验原理:扫描程序的任务是从源代码中读取字符并形成由编译器的以后部分(通常是分析程序)处理的逻辑单元。由扫描程序生成的逻辑单元称作记号(token),将字符组合成记号与在一个英语句子中将字母将字母构成单词并确定单次的含义很相像。在此程序中,我将记号分成了以下类型:typedefenum{/

4、/按照书上附录B程序布局,放在globals.h中ENDFILE,ERROR,IF,ELSE,INT,RETURN,VOID,WHILE,ID,NUM,ASSIGN,PLUS,MINUS,TIMES,OVER,LT,LET,BT,BET,EQ,NEQ,//=+-*/<<=>>===!=LPAREN_1,RPAREN_1,SEMI,COM,LPAREN_2,RPAREN_2,LPAREN_3,RPAREN_3,LIN,RIN//{};,[]()/*}TokenType;其中,关键字有:else、if、in

5、t、return、void、while;专用符号有:+、-、*、/、<、<=、>、>=、==、~=、=、;、,、(、)、[、]、{、}、/*、*/其他标记是ID、NUM,通过下列正则表达式定义:ID=letterletter*NUM=digitdigit*letter=a

6、..

7、z

8、A

9、..

10、Zdigit=0

11、..

12、9小写大写字母是有区别的。空格由空白、换行符和制表符组成。空格通常被忽略,除了他必须分开ID、NUM关键字。注释常用通常的C语言符号/*...*/围起来。注释可以放在任何空白出现的位置(即注

13、释不能放在标记内)上,且可以超过一行。注释不能嵌套。2.2.1.2、实验方法:我通过对scanner部分原理的了解,确定了他的NFA,再将NFA转化成DFA,并且将状态数最小化。最后根据我所得的DFA与课后TINY的示例程序编写scanner.c。最后所得的DFA:2.2.1.3、编程方法:编程采用C语言。初始状态设置为START,当需要得到下一个token时,取得此token的第一个字符,并且按照DFA与对此字符的类型的分析,转换状态。重复此步骤,直到DONE为止,输出token类型。此中难点在于对于

14、注释的分析,因此我将判断注释分成几个步骤。当字符为“/”时,状态转换为INASSIGN_1(自创的)再判断下一个字符,如果为“*”则是注释,如果是其他的则字符停滞与当前字符(ungetNextChar()),并且输出“/”。在开始时一直未注意停滞与当前字符,因此总是读不出“/v*”中的“v”,在调试多次后才得以解决。2.2.2、parse部分:2.2.2.1、实验原理:C-语言的各个语法规则:1.program→declaration-list2.declaration-list→declaration

15、-listdeclaration

16、declaration3.declaration→var-declaration

17、fun-declaration4.var-declaration→type-specifierID;

18、type-specifierID[NUM];5.type-specifier→int

19、void6.fun-declaration→type-specifierID(params)compound-stmt(在课后解释中comp

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

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

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