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

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

ID:6327362

大小:266.00 KB

页数:13页

时间:2018-01-10

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

《编译原理课程设计报告-c语言词法分析器》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、编译原理课程设计报告题目名称C语言词法分析器班级24020802学号姓名指导教师编写时间2010/12/10-2-目录1.课程设计题目名称-2-2.课程设计目的与任务-2-3.设计思想和实现方法-3-4.程序说明-3-5.程序运行结果和测试报告-4-6.存在问题及分析-6-7.总结及体会-6-参考文献-6-附件一-7-附件二-11--2-1.课程设计题目名称使用工具实现C/C++语言词法分析器2.课程设计目的与任务a)人数:1人b)时间:一周c)输入:C/C++源代码文件,即后缀为c/cpp的文件。d)输出:后缀为tok的文本性文件。

2、e)实现功能:完成C/C++语言的词法分析器(C语言词法记号及其含义详见附件一)词法记号含义LB“{”LP“(”RB“}”RP“)”PLUS“+”……-2-1.设计思想和实现方法词法分析器的作用如下:1.读入源程序字符序列2.对源程序进行预处理,如删除注释和回车换行符,宏展开等3.识别源程序中的单词符号,创建符号表并在相应的符号表中登录信息4.输出单词符号序列对于此题,我们可以选择使用C++人工编写词法分析代码来实现,也可以使用Lex编程来自动生成词法分析器。相对于Lex编程,第一种方案的有着思路简单,实现方便的优点,但随着词法分析的

3、深入,代码编写的复杂度和重复度逐渐上升,为词法分析的实现增加许多困难;而使用Lex编程则克服了这一困难,若需要增加一种识别模式,仅仅需要增加的是对此模式的正则表达式的编写以及识别后的动作编写。Lex是一种生成扫描器的工具,我们可以通过编写Lex文件来实现识别文本中的词汇模式的程序。Lex编程可以分为三步:1.以Lex可以理解的格式制定模式相关的动作。2.在这一文件上运行Lex,生成扫描器的C/C++代码。3.编译和链接C代码,生成可执行的扫描器。我要做的就是编写C语言词法的正则表达式,以及需要识别的各种词法记号和匹配后需要执行的动作即

4、可,其他的操作都可以交给Lex来执行。(详细源代码见附件二)2.程序说明一个标准的Lex程序分为三个段:第一段:定义部分全局声明部分起始于“%{”符号,终止于“%}”符号,其间可以包括include语句、声明语句在内的C语句。例如:%{#include"stdio.h"intlinenum;%}第二段:规则部分规则部分起始于“ %%”符号,终止于“%%”符号,其间则是词法规则。词法规则由模式和动作两部分组成。模式部分可以由任意的正则表达式组成,动作部分由C语言语句组成,这些语句用来对所匹配的模式进行相应处理。需要注意的是,lex将识别

5、出来的单词存放在yytext[]字符数据中,因此该数组的内容就代表了所识别出来的单词的内容。例如:%%-12-delim[t]ws{delim}+number{digit}+(.{digit}+)?(E[+-]?{digit}+)?{ws}{/*忽略空格符、制表符、换行符的操作*/}{number}{fprintf(yyout,"%st//Number(常数)",yytext);}%%在上述代码中,“ws{delim}+”代表识别空格符、制表符、换行符的规则,“{ws}{/*忽略空格符、制表符、换行符的操作*/}”就代

6、表对识别出的“ws”进行操作,即忽略空格符、制表符、换行符。第三段:是补充的用户自定义函数。例如:intyywrap(){return1;}intmain(intargc,char*argv[]){yyin=fopen("input.c","r");yyout=fopen("output.tok","w");printf("input.c文件分析完毕,结果保存在output.tok文件");fprintf(yyout,"//c语言词法分析//2402080216//杨凯//2010/12/10//词法分析如下:

7、");yylex();return0;}上述代码就是一个用户自定义的函数,此函数实现的功能是:打开input.c文件进行词法分析,并将结果输出到output.tok文件中。1.程序运行结果和测试报告使用Lex编程,命名为mylexer.l,使用ParserGenerator2编译生成mylexer.c、mylexer.h和mylexer.v文件,在Microsoftvisualc++6.0中新建一个工程,命名为test,将mylexer.c加入到sourcefiles,将mylexer.h加入到headerfiles,配置好环境变

8、量后编译运行,运行结果如下图所示。用来测试的C语言文件名为input.c,经词法分析后输出的文件命名为output.tok。由结果可知,顺利完成词法分析任务。图1编译运行运行结果-12-图2input.c文件截图图3ou

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

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

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