设计2词法分析之基于Lex实现词法分析报告Word格式文档下载.docx
- 文档编号:17712974
- 上传时间:2022-12-08
- 格式:DOCX
- 页数:8
- 大小:185.62KB
设计2词法分析之基于Lex实现词法分析报告Word格式文档下载.docx
《设计2词法分析之基于Lex实现词法分析报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《设计2词法分析之基于Lex实现词法分析报告Word格式文档下载.docx(8页珍藏版)》请在冰豆网上搜索。
定义正则表达式如下
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的词法分析器构造方法。
掌握了词法分析器的原理以及功能。
词法分析是编译过程中的一个阶段,在语法分析前进行。
也可以和语法分析结合在一起作为一遍,由语法分析程序调用词法分析程序来获得当前单词供语法分析使用。
词法分析程序的主要任务:
读源程序,产生单词符号。
词法分析程序的其他任务:
滤掉空格,跳过注释、换行符追踪换行标志,复制出错源程序,宏展开,等等等等。
词法分析工作从语法分析工作独立出来的原因:
简化设计,改进编译效率,增加编译系统的可移植性。
而且从划分关键字,运算符,界符,标识符和常量,才发现数字,字母及符号组合有很多很多,无法全部枚举,所以在新建的文本文档中只象征性的列出几种符号,但这并不影响此法分析结果的完成。
总之,通过本次实验,一点点分析词法分析器的功能,并努力实现它,掌握了课程设计内容的同时也锻炼了自己分析解决问题的能力以及编程能力,收获颇丰!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 设计 词法 分析 基于 Lex 实现 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)