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

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

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

1、编译原理课程设计报告 xx xxxxxxxxx 编译原理课程设计报告课题名称: C-词法扫描器及语法分析器实现 提交文档学生姓名: 提交文档学生学号: 同组 成 员 名 单: 无 指导 教 师 姓 名: 金军 指导教师评阅成绩: 指导教师评阅意见: . . 提交报告时间:2014年 6月 xx日目录目录21 课程设计目标22 分析与设计42.1 程序结构43 程序代码实现93.1 代码结构93.2.1 globals.h93.2.2 scan.c113.2.3 parser.c183.4 util.c303.5 test.cpp364 测试结果384.1.给出标准测试程序的词法和语法分析结果:

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

3、译的注释等符号先滤掉,只保留要翻译的符号串,即要求设计一个供词法分析调用的预处理子程序;b. 能够拼出语言中的各个单词;c. 返回(种别码, 属性值)。(2)语法分析要求用学习过的自底向上或自顶向下的分析方法等,实现对表达式、各种说明语句、控制语句进行语法分析。若语法正确,则用语法制导翻译法进行语义翻译;生成并打印出语法树;若语法错误,要求指出出错性质和出错位置(行号)。2 分析与设计2.1 程序结构本程序采用C+语言以面向对象的思想编写,程序分为两部分:词法分析(Scanner)和语法分析(Parser)。扫描程序执行词法分析,并将字符序列收集到token中,并将每一行的Token打印出来。

4、l 实现方法:Scanner:手工实现Parser:递归下降l 系统总图:ParserScannersource code Token Syntax Tree 程序流程:在程序中,词法分析获取所有Token,并将获取的Token存储在scanner对象的tokenString中。然后Parser类的语法分析程序就根据tokenString中的Token进行语法分析,生成语法树,最后打印语法树。同时,这也是程序的流程。整体程序流程图开始删除注释出错词法分析TF结束语法分析出错出错输出出错信息TFFT从文件获取源代码l 扫描器:C惯用的词法1、语言的关键字:else if int return v

5、oid while2、专用符号:+ - * / = = != = ; , ( ) /* */3、其他标记是ID和NUM,通过下列正则表达式定义:ID = letter letter*NUM = digit digit*letter = a|.|z|A|.|Zdigit = 0|.|94、空格由空白、换行符和制表符组成。空格通常被忽略,除了它必须分开ID、NUM关键字。5. 注释用通常的C语言符号/ * . . . * /围起来。注释可以放在任何空白出现的位置(即注释不能放在标记内)上,且可以超过一行。注释不能嵌套。DFA图如下:初始状态设置为START,当需要得到下一个token时,取得此to

6、ken的第一个字符,并且按照DFA与对此字符的类型的分析,转换状态。重复此步骤,直到DONE为止,输出token类型。参考课本中所给的TINY扫描程序的DFA,C-的DFA不同之处在于注释以及(= =,! = , =)的处理:1. 注释部分参考了课本中C风格注释的DFA; Other other *54321 / * * / Other other 2. 处理(= =,! = , =)时并没有新建状态,而是在状态INASSIGN中分了4种情况,通过一个变量分别处理。INENDCOMMENTl 语法分析: C-语法与语义:1. program declaration-list 2. declar

7、ation-list declaration-list declaration | declaration 3. declaration var-declaration | fun-declaration 4. var-declaration type-specifier ID ; | type-specifier ID NUM ; 5. type-specifier int | void 6. fun-declaration type-specifier ID ( params ) compound-stmt (在课后解释中compound-stmt前面没有“|”符号) 7. params

8、params-list | void 8. param-list param-list , param | param 9. param type-specifier ID | type-specifier ID 10. compound-stmt local-declarations statement-list 11. local-declarations local-declarations var-declaration | empty 12. statement-list statement-list statement | empty 13. statement expressio

9、n-stmt | compound-stmt | selection-stmt | iteration-stmt | return-stmt 14. expression-stmt expression ; | ; 15. selection-stmt if ( expression ) statement | if ( expression ) statement else statement 16. iteration-stmt while(expression) statement 17. return-stmt return ; | return expression ; 18. ex

10、pression var = expression | simple-expression 19. var ID | ID expression 20. simple-expression additive-expression relop additive-expression | additive-expression 21. relop = | | = | = | != 22. additive-expression additive-expression addop term | term 23. addop + | - 24. term term mulop factor | fac

11、tor 25. mulop * | / 26. factor ( expression ) | var | call | NUM 27. call ID ( args ) 28. args arg-list | empty 29. arg-list arg-list , expression | expressionl 代码设计格式:程序结构:语法分析函数parser通过调用词法分析函数getToken实现语法分析。文件和函数的设计说明:文件main.c包含相应头文件,及main函数的实现;文件golbals.h包含符号表和分析数的数据结构及在其它文件中使用的变量;文件util.h 和util

12、.c实现与词法分析和语法分析输出相关的函数printToken和printTree,以及分析树节点初始化相关的函数newStmtNode,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 namespace std;#ifndef FALSE#define FALSE 0#endif#ifndef TRUE#define TRUE 1;#endif/ 保留字的个数#define MAXRESERVED 6typedef enum/book

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

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