设计2词法分析之基于Lex实现词法分析报告Word格式文档下载.docx

上传人:b****6 文档编号:17712974 上传时间:2022-12-08 格式:DOCX 页数:8 大小:185.62KB
下载 相关 举报
设计2词法分析之基于Lex实现词法分析报告Word格式文档下载.docx_第1页
第1页 / 共8页
设计2词法分析之基于Lex实现词法分析报告Word格式文档下载.docx_第2页
第2页 / 共8页
设计2词法分析之基于Lex实现词法分析报告Word格式文档下载.docx_第3页
第3页 / 共8页
设计2词法分析之基于Lex实现词法分析报告Word格式文档下载.docx_第4页
第4页 / 共8页
设计2词法分析之基于Lex实现词法分析报告Word格式文档下载.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

设计2词法分析之基于Lex实现词法分析报告Word格式文档下载.docx

《设计2词法分析之基于Lex实现词法分析报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《设计2词法分析之基于Lex实现词法分析报告Word格式文档下载.docx(8页珍藏版)》请在冰豆网上搜索。

设计2词法分析之基于Lex实现词法分析报告Word格式文档下载.docx

定义正则表达式如下

ID=letterletter*

NUM=digitdigit*

Letter=a|…|z|A|…|Z

Digit=0|…|9

Keyword=else|if|int|return|void|while

Specialsymbol=+|-|*|/|<

|<

=|>

|>

=|==|!

=|=|;

|,|(|)|[|]|{|}|/*|*/

Whitespace=“”

Enter=\n

在lex中的构造

letter[A-Za-z]

digit[0-9]

id({letter}|[_])({letter}|{digit}|[_])*

error_id({digit})+({letter})+

num{digit}+

whitespace[\t]+

enter[\n]+

3.2转换规则定义

在Lex中的规则定义构造

定义识别保留字规则

"

int"

|"

else"

return"

void"

if"

while"

{Upper(yytext,yyleng);

printf("

%d行"

lineno);

%sreservedword\n"

yytext);

}//保留字

定义识别数字规则

{num}

{printf("

%sNUM\n"

}//数字

定义识别专用符号规则

"

;

("

)"

{"

}"

*"

/"

+"

-"

>

<

="

=="

!

/*"

*/"

%sspecialsymbol\n"

}//特殊符号

定义识别标识符规则

{id}

printf("

%sID\n"

}//标识符

定义识别错误的字符串规则

当开头为数字的后面为字母的字符串时,是错误的标识符。

{error_id}

error:

%s\n"

}//以数字开头的字符自动报错

定义忽略空格规则

{whitespace}

{/*skipwhitespace*/}//忽略空格

定义忽略回车规则

{enter}

{lineno++;

}//遇到回车自动加行号忽略

3.3辅助程序

辅助程序集中包括

主函数main()和辅助函数toupper()。

3.3程序代码实现

%{

#include<

stdio.h>

stdlib.h>

string.h>

intyywrap();

intlineno=1;

%}

delim[\t]

ws{delim}+

id{letter}({letter}|{digit})*

number{digit}+

error_id({digit})+({letter})+

enter[\n]

spchar("

["

]"

ariop("

relop("

comment\/\*(\*[^/]|[^*])*\*\/

reswd(int|else|return|void|if|while)

{ws}{}

{comment}{}

{enter}{lineno++;

}

{reswd}{fprintf(yyout,"

%d行\tkeywod\t%s\n"

lineno,yytext);

{spchar}{fprintf(yyout,"

%d行\tspchar\t%s\n"

{id}{fprintf(yyout,"

%d行\tidentifier\t%s\n"

{number}{fprintf(yyout,"

%d行\tnumber\t%s\n"

{error_id}{fprintf(yyout,"

%d行\terror_id\t%s\n"

{ariop}{fprintf(yyout,"

%d行\tari_op\t%s\n"

{relop}{fprintf(yyout,"

%d行\trel_op\t%s\n"

intyywrap(){return1;

intmain(void)

{

charinfilename[100];

输入文件名:

);

scanf("

%s"

infilename);

yyin=fopen(infilename,"

r"

yyout=fopen("

out"

w"

yylex();

return0;

 

四、运行结果及分析

测试的C语言代码:

测试结果:

测试结果:

测试代码:

五、总结

通过本次课程设计的练习,学会运用Lex自动构造词法分析器,学会了基于ParserGenarator的词法分析器构造方法。

掌握了词法分析器的原理以及功能。

词法分析是编译过程中的一个阶段,在语法分析前进行。

也可以和语法分析结合在一起作为一遍,由语法分析程序调用词法分析程序来获得当前单词供语法分析使用。

词法分析程序的主要任务:

读源程序,产生单词符号。

词法分析程序的其他任务:

滤掉空格,跳过注释、换行符追踪换行标志,复制出错源程序,宏展开,等等等等。

词法分析工作从语法分析工作独立出来的原因:

简化设计,改进编译效率,增加编译系统的可移植性。

而且从划分关键字,运算符,界符,标识符和常量,才发现数字,字母及符号组合有很多很多,无法全部枚举,所以在新建的文本文档中只象征性的列出几种符号,但这并不影响此法分析结果的完成。

总之,通过本次实验,一点点分析词法分析器的功能,并努力实现它,掌握了课程设计内容的同时也锻炼了自己分析解决问题的能力以及编程能力,收获颇丰!

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 其它课程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1