- 1、本文档共24页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译原理及实现03第3章 词法分析
第3章 词法分析 3.1词法分析的功能 3.1词法分析的功能 3.2 程序语言的单词符号种类及词法分析输出 3.2 程序语言的单词符号种类及词法分析输出 3.3 正则文法及状态图 3.3.1 状态图 3.3.1 状态图 3.3.2 状态图的用法 3.3.2 状态图的用法 3.3.2 状态图的用法 3.4 词法分析程序的设计与实现 TEST语言的各类单词符号的正则文法规则如下: TEST语言的各类单词符号的正则文法规则如下: TEST语言的各类单词符号的正则文法规则如下: TEST语言的各类单词符号的正则文法规则如下: 3.4.2 TEST语言词法分析程序的构造 3.4.2 TEST语言词法分析程序的构造 3.4.2 TEST语言词法分析程序的构造 3.4.3 TEST语言的词法分析程序实现 3.4.3 TEST语言的词法分析程序实现 习题 * 词法分析程序又称词法分析器或扫描器,是编译过程的第一步,是下一步进行语法分析的基础。 3.1词法分析的功能 3.2 程序语言的单词符号种类及词法分析输出 3.3 正则文法及状态图 3.4 词法分析程序的设计与实现 扫描源程序字符流,按照源语言的词法规则识别出各类单词符号,并产生用于语法分析的符号序列,即将字符串源程序转换成符号串源程序。程序设计语言的保留字或关键字、标识符、常数、各种运算符等都是单词符号的例子。词法分析程序要做的工作是:从源程序的第一个字符开始,顺序读字符,一次读一个,根据所读进的字符识别各类单词,同时去掉源程序中的空白和注释。词法分析检查的错误主要是挑出源程序中出现的非法符号。所谓非法符号是指不是程序设计语言中允许出现的符号,就像自然语句中的错字。 词法分析与语法分析之间的关系通常有两种形式: 1.词法分析作为独立的一遍 词法分析可作为单独一遍来实现。这种词法分析的输出存入一个中间文件供语法分析使用。这样通过词法分析,就可以将字符串源程序转换成符号串源程序,如图3.1。 字符串源程序 词法分析 符号串源程序 图3.1 词法分析单独作为一遍 2.词法分析程序作为语法分析程序的子程序 有些编译程序将词法分析和语法分析安排在同一遍中,此时词法分析作为语法分析程序的一个子程序。每当语法分析需要一个新的符号时,就调用词法分析子程序,词法分析子程序从字符串源程序中识别出一个具有独立意义的单词,将其符号返给语法分析。这种方法避免了中间文件,省去了送取符号工作,有利于提高编译程序的效率,如图3.2。 字符串源程序 词法分析器 语法分析器 图3.2 词法分析作为语法分析子程序 取符号 送符号 词法分析的功能是为识别出的具有独立意义的单词,而输出的就是这些单词的符号。在程序设计语言中,单词符号是最基本的语法单位,具有确定的语法意义。通常程序语言的单词符号有: 保留字:如if、while、for等等。这些保留字在程序语言中具有固定的意义,是编译程序识别各类语法成分的依据,用户不能用它们作标识符。 标识符:由用户定义,用来表示各种名字,如变量名、函数名、数组名等等。 无符号数:如125、0.788、15.2 分界符:如+、-、*、/、;、(、)等单分界符,还有=、=、!=、++等双分界符 . 词法分析的输出常采用二元式,如图3.3所示。 单词值 单词类别 图3.3 词法分析程序的输出形式 单词类别通常用一个整数类码或单词记号表示,单词记号比整数码含义明确。例如,保留字FOR,可直接用同样的字符串FOR作为单词记号来表示,而如果用整数类码,含义就不直观。用汇编编写词法分析程序,单词类别常用整数表示,因为用单词记号处理起来比较麻烦。而如果用高级语言编写词法分析程序,那么采用单词记号则更自然些,因为高级语言提供了字符串处理函数,处理助记符号不再烦琐。一个语言的单词类别如何分类、分成几类、怎样编码,主要取决于技术处理上的方便。标识符一般归为一类,常数则按类型(整数、实数等)分类。保留字即可将全体定为一类,也可一字一类。分界符可单独作为一类,也可采用一符一类的分法。采用一字一类或采用一符一类的分法实现处理起来更方便一些。因为,如果一个类别只含一个单词符号,那么,对于这个单词符号,类别编码就完全代表它自身的值,词法分析就不必输出其值了。 程序设计语言的单词符号可用3型文法来描述,3型文法也称为正则文法。对于正则文法所描述的语言可以用一种有穷自动机来识别。我们的目的是实现词法分析程序,所以为了简化问题,我们直接介绍这种自动机的非形式表示,即状态图。 3.3.1 状态图 所谓“状态图”就是一张有穷的有向图。图中的结点代表状态,用圆圈表示,状态间用有向弧线连接,连接弧上标记有符号,表示在弧线射出端的状态下,读入弧线上标记的符号可转换到弧线指向
文档评论(0)