1 / 13
文档名称:

编译原理课程设计报告-C语言词法分析器.doc

格式:doc   大小:269KB   页数:13页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

编译原理课程设计报告-C语言词法分析器.doc

上传人:endfrs 2020/7/2 文件大小:269 KB

下载得到文件列表

编译原理课程设计报告-C语言词法分析器.doc

文档介绍

文档介绍:编译原理课程设计报告题目名称C语言词法分析器班级24020802学号姓名指导教师编写时间2010/12/10目录1. 课程设计题目名称 -2-2. 课程设计目的与任务 -2-3. 设计思想和实现方法 -3-4. 程序说明 -3-5. 程序运行结果和测试报告 -4-6. 存在问题及分析 -6-7. 总结及体会 -6-参考文献 -6-附件一 -7-附件二 -11-课程设计题目名称使用工具实现C/C++语言词法分析器课程设计目的与任务人数:1人时间:一周输入:C/C++源代码文件,即后缀为c/cpp的文件。输出:后缀为tok的文本性文件。实现功能:完成C/C++语言的词法分析器(C语言词法记号及其含义详见附件一)词法记号含义LB“{”LP“(”RB“}”RP“)”PLUS“+”……设计思想和实现方法词法分析器的作用如下:读入源程序字符序列对源程序进行预处理,如删除注释和回车换行符,宏展开等识别源程序中的单词符号,创建符号表并在相应的符号表中登录信息输出单词符号序列对于此题,我们可以选择使用C++人工编写词法分析代码来实现,也可以使用Lex编程来自动生成词法分析器。相对于Lex编程,第一种方案的有着思路简单,实现方便的优点,但随着词法分析的深入,代码编写的复杂度和重复度逐渐上升,为词法分析的实现增加许多困难;而使用Lex编程则克服了这一困难,若需要增加一种识别模式,仅仅需要增加的是对此模式的正则表达式的编写以及识别后的动作编写。Lex是一种生成扫描器的工具,我们可以通过编写Lex文件来实现识别文本中的词汇模式的程序。Lex编程可以分为三步:以Lex可以理解的格式制定模式相关的动作。在这一文件上运行Lex,生成扫描器的C/C++代码。编译和链接C代码,生成可执行的扫描器。我要做的就是编写C语言词法的正则表达式,以及需要识别的各种词法记号和匹配后需要执行的动作即可,其他的操作都可以交给Lex来执行。(详细源代码见附件二)程序说明一个标准的Lex程序分为三个段:第一段:定义部分全局声明部分起始于“%{”符号,终止于“%}”符号,其间可以包括include语句、声明语句在内的C语句。例如:%{#include""intlinenum;%}第二段:规则部分规则部分起始于“ %%”符号,终止于“%%”符号,其间则是词法规则。词法规则由模式和动作两部分组成。模式部分可以由任意的正则表达式组成,动作部分由C语言语句组成,这些语句用来对所匹配的模式进行相应处理。需要注意的是,lex将识别出来的单词存放在yytext[]字符数据中,因此该数组的内容就代表了所识别出来的单词的内容。例如:%%delim[\t\n]ws{delim}+number{digit}+(\.{digit}+)?(E[+\-]?{digit}+)?{ws}{/*忽略空格符、制表符、换行符的操作*/}{number}{fprintf(yyout,"%s\t//Number(常数)\n",yytext);}%%在上述代码中,“ws{delim}+”代表识别空格符、制表符、换行符的规则,“{ws}{/*忽略空格符、制表符、换行符的操作*/}”就代表对识别出的“ws”进行操作,即忽略空格符、制表符、换行符。第三段:是补充的用户自定义函数。例如:intyywrap(){return1;}intmain(intargc,char*argv[]){yyin=fopen("","r");yyout=fopen("","w");printf(",\n");fprintf(yyout,"//c语言词法分析\n//2402080216\n//杨凯\n//2010/12/10\n\n//词法分析如下:\n");yylex();return0;}上述代码就是一个用户自定义的函数,此函数实现的功能是:,。程序运行结果和测试报告使用Lex编程,,、,在Microsoftvisualc++,命名为test,,,配置好环境变量后编译运行,运行结果如下图所示。,。由结果可知,顺利完成词法分析任务。