- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
第一节词法分析概述词法分析的功能功能扫描源程序的字符串,按照词法规则,识别出单词符号作为输出;对识别过程中发现的词法错误,则输出有关的错误信息。第八章词法分析
2.词法分析器和语法分析器的关系(1)词法分析作为单独的一遍输入串词法分析器语法分析器单词流第八章词法分析
词法分析作为子程序输入串词法分析器语法分析器符号表取下一单词返回下一单词第八章词法分析
第八章词法分析二.词法分析器的输出形式1.单词的种类(1)标识符:用来命名程序中出现的变量、数组、函数、过程、标号等(2)基本字:也可称关键字或保留字,如if、while、for、do、goto等(3)常数:各种类型的常数,如216、3.14159、TRUE等(4)运算符:如+、-、*、/等(5)界符:如;、:、/*、*/等
二元式01(单词类别,单词的属性)区分单词所属的类(整数编码)单词的值02单词的输出形式
2020基本字、运算符、界符:一字一码012021标识符:单列一种022022常数:按类型分类03单词类别的划分
一个例子:A:=B50+10;的输出为:(标识符的编码,‘A’)(:=的编码,—)(标识符的编码,‘B50’)(+的编码,—)(整数的编码,‘10’)(;的编码,—)
第二节词法分析器的结构扫描缓冲区输入缓冲区:源程序?输入缓冲区预处理程序:取消注解,剔除无用的空白、跳格、回车、换行等
01扫描缓冲区:从输入缓冲区输入固定长度的字符串到另一个缓冲区(扫描缓冲区),词法分析可以直接在此缓冲区中进行符号识别。其结构为:02左缓冲区03右缓冲区04起点指示器05搜索指示器
词法分析技术——超前搜索01为了判定一个单词符号的类别,必须扫描到某一地方,而该单词符号并没有这么长,这种扫描方式叫做“超前搜索”。02符号的识别
DO100I=1,10DO100I=1.10IF(5.EQ.M)GOTO100IF(5)=100基本字的识别
1243标识符的识别:读到非字母数字常数的识别:根据常数的格式;大多数常数后都有运算符或界符运算符的识别:需要超前搜索,如**界符的识别:需要超前搜索,如/*1234
01预处理子程序02词法分析器03输入缓冲区04扫描缓冲区05单词符号06输入词法分析器的结构
第三节状态转换图一.状态转换图的定义有限的有向图有向边上标记字符唯一初态若干终态(至少一个)123xy
二.状态转换图识别的串从初态出发到某一终态路径上字符的连接。下图是识别标识符的状态转换图:012字母其它字符字母或数字*
第四节词法分析器的设计单词符号第四章设计的语言允许下述单词:标识符、数字串、begin、end、integer、if、then、else、function、read、write、、*、、=、、=、、=、:=、;、(、)
单词符号类别编码助记符标识符数字串beginendintegerifthenelsID$INT$BEGIN$END$INTEGER$IF$THEN$ELSE
单词符号类别编码助记符functionreadwrite-*=910111213141516$FUNCTION$READ$WRITE$SUB$MUL$LT$LE$NE
单词符号类别编码助记符==:=;()17181920212223$EQ$GT$GE$ASSIGN$SEM$LPAR$RPAR
二.状态转换始空白字母/数字字母非字母数字数字非数字=-***数字89()
=其它=其它=其它其它
实现方法每个状态结对应一小段程序分支状态——if或case语句循环状态——while语句终态——return语句一个示意算法0102
start:token:=‘‘;getchar;getnb;casecharacterof‘a’…’z’:beginwhileletterordigitdobeginconcatenate;getcharend;retract;c:=reserve;ifc=0thenbeginbuildlist;return($ID,val)endelsereturn(c,—)end;
‘0’…’9’:beginwhiledigitdobeginconcatenate;getcharend;r
文档评论(0)