欢迎来到天天文库
浏览记录
ID:42329442
大小:428.06 KB
页数:11页
时间:2019-09-12
《编译原理课程第4讲》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、温故知新正规式计算机实现状态转换图不确定有限自动机确定有限自动机等价子集构造法最简确定有限自动机等价非形式化描述的语言状态列举法合并不可区别状态手工实现用正规式语法结构来指导构造过程?词法分析器的生成器2.5词法分析器的生成器用Lex建立词法分析器的步骤Lex编译器Lex源程序lex.llex.yy.cC编译器lex.yy.ca.outa.out输入流记号序列2.5词法分析器的生成器Lex程序包括三个部分声明%%翻译规则%%辅助过程Lex程序的翻译规则p1{动作1}p2{动作2}……pn{动作n}2.5词法分析器的生
2、成器例---声明部分%{/*常量LT,LE,EQ,NE,GT,GE,WHILE,DO,ID,NUMBER,RELOP的定义*/%}/*正规定义*/delim[t]ws{delim}+letter[AZaz]digit[09]id{letter}({letter}
3、{digit})*number{digit}+(.{digit}+)?(E[+]?{digit}+)?2.5词法分析器的生成器例---翻译规则部分{ws}{/*没有动作,也不返回*/}while{return(WHILE);}do{retu
4、rn(DO);}{id}{yylval=install_id();return(ID);}{number}{yylval=install_num();return(NUMBER);}“<”{yylval=LT;return(RELOP);}“<=”{yylval=LE;return(RELOP);}“=”{yylval=EQ;return(RELOP);}“<>”{yylval=NE;return(RELOP);}“>”{yylval=GT;return(RELOP);}“>=”{yylval=GE;return(R
5、ELOP);}2.5词法分析器的生成器例---辅助过程部分install_id(){/*把词法单元装入符号表并返回指针。yytext指向该词法单元的第一个字符,yyleng给出的它的长度*/}install_num(){/*类似上面的过程,但词法单元不是标识符而是数*/}2.5词法分析器的生成器intnum_lines=0,num_chars=0;%%++num_lines;++num_chars;.++num_chars;%%main(){yylex();printf("#oflines=%d,#ofchars
6、=%d",num_lines,num_chars);}上机实验例子example.l2.5词法分析器的生成器helloworldwoaitiananmenhelloworldilove上机实验例子example.llex.yy.exe#oflines=3,#ofchars=49本章要点源程序字符流顺序组合词法单元词法记号模式非形式化描述形式化描述正规式字母组合串语言集合集合字母表名字连接指数和LUM连接LM闭包L*正闭包L+计算机实现状态转换图不确定有限自动机确定有限自动机等价子集构造法最简确定有限自动机状态列举
7、法合并不可区别状态手工实现正规式语法结构Lex作业1、从ftp下载“软件学院编译原理实践.zip”,阅读教程中有关PL/0词法分析器的源代码。2、从ftp下载“lex_实验.zip”,按照“flex说明.txt”要求完成如下上机题(选作):1、编写一个词法分析器,它针对输入文件,实现以下功能:1)每遇到你的学号,就输出你的名字,对于其他的串原样输出。2)统计输入文件中字母的数目。例如:(以肖永跃的上机题为例):输入文件如下所示:200213001helloworldwoaitiananmenhelloworldilo
8、ve200213001输出应该如下所示:肖永钦helloworldwoaitiananmenhelloworldilove肖永钦#ofids=11,#ofchars=66
此文档下载收益归作者所有