欢迎来到天天文库
浏览记录
ID:35617942
大小:246.00 KB
页数:59页
时间:2019-04-02
《编译原理课程设计报告--词法分析器-语法分析器-lex词法分析器》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、编译原理课程设计报告词法分析器语法分析器Lex词法分析器学生姓名:学号:教师姓名:提交报告时间:2010年6月27日1.课程设计目标编写词法分析器scanner和语法分析器parser能实现对测试程序进行词法扫描和语法分析,并能给出错误提示。2.分析与设计l实现方法:实现算法:递归下降语法分析编程语言:C++l系统总图,扫描器由scanner.cpp文件实现,用getToken()函数从测试代码中获取Token,通过printToken()函数实现将Token输出。分析器由parser.cpp文件实现,通过par
2、se()函数开始进行递归下降语法分析,语法分析的输入是scanner的输出Token,将获得的语法树tree通过printTree()将语法树输出。l扫描器:各单词的转换图:STARTINCOMMENTINIDINNUMASSIGNLTMTNOT_EQMT_EQDONEEQLT_EQOVERTIMES单词转换表:letterdigit<>=!/*otherSTARTINIDINNUMLTMTASSIGNNOT_EQOVERTIMESOVERINCOMMENTDONETIMESDONEINIDINIDDONEINN
3、UMINNUMDONEASSIGNEQDONELTLT_EQDONEMTMT_EQDONELT_EQDONEMT_EQDONENOT_EQDONE符号表:ReservedWords:IF、ELSE、INT、RETURN、VOID、WHILESymbols:+、-、*、/、<、<=、>、>=、==、!=、=、;、,、(、)、[、]、{、}、/*、*/Other:number、identifierl分析器:由于使用的是递归下降的编译方法,所以没有分析表、Yacc源文件和输出文件。l代码设计说明程序结构图,代码包含了m
4、aim.cpp、scanner.cpp、parser.cpp、util.cpp、global.h、util.h、scan.h、parse.h和util.h。文件和函数的设计说明:Global.h用于对TokenType(Token类型)、NodeKind(节点类型)、StmtKind(语句类型)、ExpKind、ExpType、TreeNode(语法树节点)等进行枚举定义。Scanner.cpp用于对测试程序的代码进行词法分析,通过getToken()函数获取token,通过util.cpp中printToken
5、()函数将从测试代码中获取的token输出。Parser.cpp用于对测试程序代码经scanner词法分析输出的token进行语法分析,通过parse()函数开始语法分析,通过util.cpp中printTree()函数将分析得到的语法树输出。采用的是递归下降算法实现parser。具体的parser函数:staticTreeNode*declaration_list(void);staticTreeNode*declaration(void);staticTreeNode*var_declaration(void
6、);staticTreeNode*fun_declaration(void);staticTreeNode*params(void);staticTreeNode*param_list(void);staticTreeNode*compound_stmt(void);staticTreeNode*param(void);staticTreeNode*local_declarations(void);staticTreeNode*statement_list(void);statictreeNode*stateme
7、nt(void);staticTreeNode*expression_stmt(void);staticTreeNode*expression(void);staticTreeNode*selection_stmt(void);staticTreeNode*iteration_stmt(void);staticTreeNode*return_stmt(void);staticTreeNode*expression(void);staticTreeNode*simple_expression(void);stati
8、cTreeNode*additive_expression(void);staticTreeNode*term(void);staticTreeNode*factor(void);staticTreeNode*args(void);staticTreeNode*arg_list(void);Util.cpp用于实现printToken()函数、printTree()函数、
此文档下载收益归作者所有