编译原理课程设计-C-词法扫描器及语法分析器实现

上传人:cn****1 文档编号:456942174 上传时间:2022-11-24 格式:DOCX 页数:40 大小:585.91KB
返回 下载 相关 举报
编译原理课程设计-C-词法扫描器及语法分析器实现_第1页
第1页 / 共40页
编译原理课程设计-C-词法扫描器及语法分析器实现_第2页
第2页 / 共40页
编译原理课程设计-C-词法扫描器及语法分析器实现_第3页
第3页 / 共40页
编译原理课程设计-C-词法扫描器及语法分析器实现_第4页
第4页 / 共40页
编译原理课程设计-C-词法扫描器及语法分析器实现_第5页
第5页 / 共40页
点击查看更多>>
资源描述

《编译原理课程设计-C-词法扫描器及语法分析器实现》由会员分享,可在线阅读,更多相关《编译原理课程设计-C-词法扫描器及语法分析器实现(40页珍藏版)》请在金锄头文库上搜索。

1、编译原理课程设计报告课题名称:C-词法扫描器及语法分析器头现提交文档学生姓名:提交文档学生学号:同组成员名单:无指导教师姓名:金军指导教师评阅成绩:指导教师评阅意见:提交报告时间:2014年6月xx日目录.2.3.4.4.8.8.8.1017.29363737374041414343目录课程设计目标分析与设计2.1程序结构程序代码实现3.1代码结构3.2.1 globals.h 3.2.2 scan.c3.2.3 parser.c3.4 util.c3.5 test.cpp测试结果4.1给出标准测试程序的词法和语法分析结果:4.1.1词法分析结果4.1.2语法分析结果4.2修改代码后的结果:4

2、.2.1修改5. 本课程设计我的独创工作 6. 总结1课程设计目标学生在学习编译原理课程过程中,结合各章节的构造编译程序的基本理论,要求用 C或 C+语言描述及上机调试,实现一个C-Minus小编译程序(包括词法分析,语法分析等重要子程 序),使学生将理论与实际应用结合起来,受到软件设计等开发过程的全面训练,从而提高学生软 件开发的能力。要求:(1 )设计词法分析器设计各单词的状态转换图,并为不同的单词设计种别码。将词法分析器设计成供语法分析器调 用的子程序。功能包括:a. 具备预处理功能。将不翻译的注释等符号先滤掉,只保留要翻译的符号串,即要求设计 一个供词法分析调用的预处理子程序;b. 能

3、够拼出语言中的各个单词;c. 返回(种别码,属性值)。(2 )语法分析要求用学习过的自底向上或自顶向下的分析方法等,实现对表达式、各种说明语句、控制语句 进行语法分析。若语法正确,则用语法制导翻译法进行语义翻译;生成并打印出语法树;若语 法错误,要求指出出错性质和出错位置(行号)。2分析与设计2.1程序结构本程序米用C+语言以面向对象的思想编写,程序分为两部分:词法分析(Scanner )和语法分 析(Parser )。扫描程序执行词法分析,并将字符序列收集到token中,并将每一行的Token打印出来。实现方法:Scanner手工实现Parser :递归下降系统总图:source codeT

4、okenSyitax TreeScannerParser程序流程:在程序中,词法分析获取所有Token,并将获取的Token存储在scanner对象的tokenString中。然后Parser类的语法分析程序就根据tokenString中的Token进行语法分析,生成语法树,最后打印语法树。同时,这也是程序的流程。整体程序流程图扫描器:C惯用的词法1、语言的关键字:else if int return void while2、专用符号:+ - * / = = != = ; , ( ) /* */3、其他标记是ID和NUM通过下列正则表达式定义:ID = letter letter*NUM =

5、digit digit*letter = a|.|z|A|.|Zdigit = 0|.|94、 空格由空白、换行符和制表符组成。空格通常被忽略,除了它必须分开ID、NUM键字。5. 注释用通常的C语言符号/ * * /围起来。注释可以放在任何空白出现的位置(即注释不能放在标记内)上,且可以超过一行。注释不能嵌套。DFA图如下:初始状态设置为START当需要得到下一个token时,取得此token的第一个字符,并且按照DFA与对 此字符的类型的分析,转换状态。重复此步骤,直到 DON为止,输出token类型。参考课本中所给的TINY扫描程序的DFA C-的DFA不同之处在于注释以及(=,!=,

6、=) 的处理:1. 注释部分参考了课本中C风格注释的DFA2.处理(=,!=, =)别处理。时并没有新建状态,而是在状态INASSIGh中分了 4种情况,通过一个变量分ctherjotherpletteDONEletter.-INIDSTART-2ZHU*INASSIGN*INENDCOMMENTWhite spacother*语法分析:C-语法与语义:1. program 宀 declaration-list2. declarati on-listdeclarati on-list declarati on | declarati on3. declarati onvar-declarati

7、 on | fun-declarati on4. var-declarati ontype-specifier ID ; | type-specifier ID NUM ;5. type-specifierint | void6. fun-declarationtype-specifier ID ( params ) compound-stmt(在课后解释中 compound-stmt前面没有“ | ”符号)7. params params-list | void8. param-list param-list , param | param9. param type-specifier ID

8、 | type-specifier ID 10. compound-stmt local-declarations statement-list 11. local-declarati onslocal-declarati ons var-declarati on | empty12. stateme nt-list stateme nt-list stateme nt | empty13. stateme ntexpressi on-stmt | compo un d-stmt | select ion-stmt |iterati on-stmt | return-stmt14. eXpre

9、ssi on-stmtexpressi on ; | ;15. select ion-stmtif ( expressi on ) stateme nt | if ( expressi on )stateme nt else stateme nt16. iteratio n-stmtwhile(expressio n) stateme nt17. return-stmt return ; | return expression ;18. expressi onvar = expressi on | simple-expressi on19. var t ID | ID expression 2

10、0. simple-expressi ont additive-expressi on relop additive-expressi on |additive-expressi on21. relop t = | | = | = | !=22. additive-expressi on t additive-expressi on addop term | term23. addop t +|-24. term t term mulop factor | factor25. mulop t * | /26. factor t( expression ) | var | call | NUM2

11、7. call t id( args )28. args t arg-list | empty29. arg-list 宀 arg-list , expressi on | expressi on代码设计格式:程序结构:语法分析函数parser通过调用词法分析函数getToken实现语法分析。文件和函数的设计说明:文件main.c包含相应头文件,及main函数的实现;文件golbals.h包含符号表和 分析数的数据结构及在其它文件中使用的变量;文件util.h 和util.c实现与词法分析和语法分析输出相关的函数printToken 和printTree,以及分析树节点初始化相关的函数 new

12、StmtNode newExpNode(Expkind) 和copyString ;文件scan.h和scan.c实现词法分析,主要函数为getToken;文件parser.h 和parser.c 实现语法分析,函数为与文法规则对应的函数。3程序代码实现3.1代码结构3.2.1 globals.h#ifndef _GLOBALS_H_#define _GLOBALS_H#include #include #include #include #include #include using namespacestd;#ifndef FALSE#define FALSE)#endif#ifndef

13、TRUE#define TRUE;#endif/保留字的个数#define MAXRESER0EDtypedef enum/book-keeping tokensENDFILEERRQ R/reserved wordsIF, ELSEINT, RETURVOIDWHILE/multicharacter tokensID, NUM/special symbols/LBRACKET/RBRACKET - LBRACE/RBRACE ASSIGNEQLT, RT PLUSMINUSTIMESOVERPARENRPARENEMI ,LBRACKERBRACKENEQCOMMLBRAC限BRACE ,L

14、TEQRTEQTokenTypeexternFILE* source;/源代码文件externFILE* listing;/listing output text fileexternFILE* code;/extern int lineno;/语法分析树 typedef enumNodeKindStmtK ExpK DeclarationK ,;typedef enumStmtKindIfK, WhileK AssignK, ReturnK VoidK,;typedef enumExpKindOpK ConstK IdK, Array_expK Function_expK, ; typedef enumExpTypeVoid, Integer;typedef enumDeclarationKind#define MAXCHILDREN typedef struct treeNode struct treeNode *declarati

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号