- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2hhh第4章 词法分析
第2章词法分析词法分析的任务:从左至右逐个字符地对源程序进行扫描,产生一个一个的单词符号,从而把字符串形式的源程序变换成单词串形式的中间程序。词法分析程序也叫词法分析器或扫描器。词法分析可采用如下两种处理结构:(1)把词法分析程序作为主程序。词法分析作为独立的一遍来完成。(2)把词法分析程序作为语法分析程序调用的子程序。进行语法分析时,每当需要一个单词时便调用词法分析程序。2.1词法分析器设计方法 2.2一个简单的词法分析器示例2.3正规表达式与FA简介2.4正规表达式到FA的构造2.5词法分析器的自动生成2.1词法分析器的设计方法2.1.1单词符号的分类与输出形式1.单词符号分类单词符号是程序语言的基本语法单位。程序语言中的单词符号通常可分为如下五种:(1)保留字:如if,else,while,do(2)标识符:用于标记常量、变量、数组、函数、类型等的名字(3)常数:如实型0.628,布尔型True(4)运算符:如+,-,*,/,,(5)界符:分界符号,如,;()注意:一个程序语言的保留字、运算符和界符的个数是确定的,而标识符和常数的个数不确定。 2.单词符号的输出形式单词符号通常表示为二元式:(单词种别,单词自身的值)(1)单词种别单词种别表示单词的种类。一个语言的单词符号如何分类、分为几类取决于处理上的方便。通常,每种单词对应一个整数码。保留字:可全体视为一种,也可一字一种;标识符:统归为一种;常数:统归为一种,或按整型、实型、布尔型等分为几种;运算符和界符:统归为一种,或一符一种(2)单词自身的值若一个种别只含一个单词,则其种别编码代表自身的值。若一个种别含多个单词,则除种别编码外,还需给出单词自身的值,从而把同一种类的不同单词区分开。说明:(1)标识符自身的值为标识符自身的字符串,而常数自身的值为常数本身的二进制数值;(2)可以用指向某表格中一个特定项目的指针区分同一种类中的不同单词。例如,标识符可用它在符号表中的入口指针作为自身的值;常数可用它在常数表中的入口指针作为自身的值。在词法分析中,可以用状态转换图来识别单词。在状态转换图中,结点代表状态,结点之间用有向边连接,有向边上可标记字符。考虑右图中状态i,若读入x,则转到状态j;若读入y,则转到状态k。2.1.2状态转换图说明:状态转换图中的状态数目是有限的,其中必有一个初态和若干个终态。每个终态对应一类单词,终态用双圈表示,以区别于其它状态。识别标识符的状态转换图如下:识别无符号整数的状态转换图如下:识别无符号数的状态转换图如下:在状态转换图中,到达终态意味着识别出一个单词符号,因此,终态时输出相应单词的种类编码。若到达终态时多读入了一个符号,则识别出该单词后再把多读入的那个符号退回。此类情况在终态上以*作为标识。对于一个不含回路的分支状态,可用一个switch()语句或一组if-else语句来实现。考虑如下所示的状态转换图,其对应的switch语句如下:状态i对应的switch语句如下:s=getchar();switch(s){casea:…casez:实现状态j功能的语句;break;case0:…case9:实现状态k功能的语句;}对于一个含回路的状态,可用一个while语句来实现。考虑下述状态转换图,其对应的while语句如下:状态i对应的while语句:getchar();while(letter()||digit())getchar();实现状态j功能的语句;状态转换图的终态一般对应一个return()语句,意味着从词法分析器返回到调用段,通常返回到语法分析器。2.2一个简单的词法分析器示例大多数程序语言的单词符号都可用状态转换图予以识别。下面利用状态转换图构造一个C语言子集的简单词法分析器。2.2.1C语言子集的单词符号表示假定一个C语言子集的所有单词符号为:while,if,else,switch,case,标识符,常数,+,-,*,,=,=,==,;。其种别编码和内码值如下表所示:表2.1一个C语言子集的单词符号及其种别编码和内码值单词符号种别编码助记符内码值while1reswhileif1resifelse1reselseswitch1resswitchcase1rescase标识符2idid位置说明:直接使用整数编码不利于记忆,该例中采用一些助记符表示种别编码。单词符号种别编码助记符内码值常数3numnum位置+4op+−4op-*4op*=5ropLE5ropLT==5ropEQ=6=_;7;_2.2.2C语言子集对应的状态转换图首先,对输入串做预处理,即剔除多余的空格、注释等。其次,把保留字作为一类特殊标识符处理,即当状态转换图识别出一个标识符时,查保留字表以确定它是否为一个保留字。C语言子集对应的状态转换图如下:说明:(1)状态2
您可能关注的文档
最近下载
- 湖南省名校联考联合体2025-2026学年高一上学期10月联考语文试卷含答案.pdf VIP
- 部分常用岩土物理力学参数经验数值.doc
- 中南大学网校马克思主义基本原理考试.doc VIP
- 浙江省精诚联盟2025-2026学年高一上学期10月联考生物试卷含答案.docx VIP
- 2025-2026学年广东省广州市第一中学高一上学期10月月考数学试卷含详解.docx VIP
- 抖音爸爸博主“新父职”的数字实践研究_.pdf VIP
- 演示文稿青春期生长发育.ppt VIP
- 2023年中南财经政法大学公共课《马克思主义基本原理概论》期末试卷B(有答案).docx VIP
- 2024-2025学年广东省珠海市文园中学九年级(下)开学物理试卷.docx VIP
- 保健品营销策划.pdf VIP
文档评论(0)