欢迎来到天天文库
浏览记录
ID:50066905
大小:204.00 KB
页数:21页
时间:2020-03-08
《编译原理 教学课件 作者 王生原 董渊 杨萍 张素琴 slide04.ppt》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、词法分析第四讲词法分析概述词法分析程序的设计与实现词法分析词法分析程序的自动构造词法分析概述词法分析程序(LexicalAnalyzer)或词法扫描程序(Scanner)的作用从左至右扫描构成源程序的字符流识别出有词法意义的单词(Lexemes)返回单词的记号(Token)和单词的值,或词法错误信息除以上主要任务外,常伴有如下任务滤掉空格,跳过注释、换行符,追踪换行标志,复制出错源程序,宏展开,……编译程序主题中如何组织词法分析程序可以作为单独的一遍较常用的方式是由语法分析程序调用基本任务都是识别单词词法分析程序单词记号形式的源程序……源程序语法分析程序
2、词法分析程序……源程序语法分析程序记号(token)gettoken词法分析概述例:Pascal程序文本position:=initial+rate*60;经词法分析程序处理后,转换为下列单词序列单词类别(对应一个单词记号)单词值标识符position赋值算符(:=)标识符initial加算符(+)标识符rate乘算符(*)整数常量60分号(;)词法分析概述单词的类别及其组成模式(Pattern)由语言的词法规则定义,是一个单词描述的集合常用的单词描述工具扩展巴克斯范式(EBNF)状态转换图正规表达式有限状态自动机词法分析程序的设计与实现实例:PL/0语
3、言词法分析程序的设计EBNF描述词法分析程序的设计与实现实例:PL/0语言词法分析程序的设计单词类别词法分析程序的设计与实现实例:PL/0语言词法分析程序的设计词法分析子程序getsym()词法分析程序的设计与实现从当前输入符号起扫描下一个词法单位,即单词通过下列变量传递单词类别publicSymbolsym;通过下列变量传递标识符单词的值publicStringid;通过下列变量传递常量单词的值publicintnum;实例:PL/0语言词法分析程序的设计词法分析子程序getsym()词法分析程序的设计与实现识别出标识符position之后sym的值被
4、置为identid的值被置为“position”识别出无符号整数60之后sym的值被置为numbernum的值被置为整数值60实例:PL/0语言词法分析程序的设计getsym()识别单词的过程词法分析程序的设计与实现逐个读取下面的字符调用getch(),其功能:漏掉空格/换行等字符,读取一个字符(为减少磁盘I/O次数,每次从文件中读取一行至缓冲区,从缓冲区取下一字符)拼成下一个有意义的词法单元根据EBNF描述直接编写识别过程也经常使用状态转换图实例:PL/0语言词法分析程序的设计PL/0词法规则的状态转换图词法分析程序的设计与实现实例:PL/0语言词法分
5、析程序的设计技术个案词法分析程序的设计与实现如何区分标识符与保留字预设一个保留字表,通过查表来确定是否保留字字符退还在识别双符号运算符之类的单词时,要注意到可能需要进行字符退还例:在读取字符‘<’后,若下一字符不是‘=’,则识别的单词是小于号‘<’,但要退还这个非<字符,以保证下一次仍读到那个非<字符词法分析程序自动构造的典型过程步骤一使用者用正规表达式作为词法规则的形式描述,每一类词法单元都对应一个正规表达式,所有正规表达式以文本方式作为自动构造工具的输入词法分析程序的自动构造词法分析程序自动构造的典型过程步骤二自动构造工具将每一个正规表达式转换成有限
6、自动机的形式,比如使用第三讲中的方法将正规表达式转换成-NFA词法分析程序的自动构造词法分析程序自动构造的典型过程步骤三(可选)增加一个新的开始状态,从该状态引一条-转移边到上述每一个-NFA的初态,得到一个新的-NFA词法分析程序的自动构造词法分析程序自动构造的典型过程步骤四必要时自动构造工具会将这些-NFA确定化,比如使用第三讲中的方法得到DFA词法分析程序的自动构造词法分析程序自动构造的典型过程步骤五必要时,自动构造工具会将有限自动机最小化化,比如使用第三讲教案2.2.5节中的方法得到等价拥有状态数目最少的DFA词法分析程序的自动构造词法
7、分析程序自动构造的典行过程步骤六若执行过第3步,那么就模拟单个完整的自动机;否则,自动构造工具按照一定的控制策略生成词法分析程序中扫描程序的代码,该扫描程序可以选择对每一类词法单元所对应的有限自动机进行模拟运行,并从当前输入符号序列中识别下一个单词,然后返回相应的单词记录词法分析程序的自动构造课后作业2通过完成第一阶段实验以及阅读实验文档掌握使用Lex生成词法分析程序的原理及方法,掌握Lex与Yacc的联用方法.阅读PL/0编译程序(任何一个版本之一)的词法分析子程序getsym()及其相关的子程序getch().(这是建议的任务,可根据的时间精力自行安
8、排)非书面作业ThankYouThat’sallfortoday.
此文档下载收益归作者所有