3.6词法分析程序的构造.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
3.6词法分析程序的构造

3.6 词法分析程序的设计 词法分析概述 单词符号的种类 单词符号是语言的基本符号,它具有独立的意义且是不可再分的。程序语言中的大部分单词符号都属于下述几类之一。 ① 标识符:用以表示各种名字,如变量名,过程名等等; ② 保留字(或关键字):如if,goto,begin,end等等,它实质上是标识符的一个子集。 ③ 数(整数或实数):125,38,34.2,2.5e3等等; ④ 单分界符:如+,-,*,/,(,),’,;,·等等; ⑤ 复合分界符:如**,/*,:=等等。 单词的输出形式 扫描程序构造每个单词符号的内部表现形式,简称为记号串。 TOKEN串:(单词的种别码,单词的属性值) 种别码:区分单词的种类,一般用整数编码来表示。分类的方法是最大限度把各类单词区分开。常是一符一码(如,分界符和保留字),一类一码(如,整数)和统一一码(如,标识符)。 单词的属性值:单词符号的属性是指单词符号的特性或特征。属性值是反应特性或特征的值,是单词自身符号的机内编码,它是编译其它阶段所需要的信息。 从化简后的DFA到程序表示 例如:识别标识符的DFA1(见图 (a))需改为图 (b)所示状态,其中,l代表字母,d代表数字。 图 (a) 图(b) 识别标识符的状态转换图说明如下: 其中0为初态,2为终态,它识别标识符的过程为: 从初态0开始,若输入符号是一字母,则读进它,并转到状态1;在状态1下,若下一个输入符号是字母或数字则读进它,并重新进入状态1; 重复这个过程,直至在状态1下发现读入的符号不再是字母或数字时(注意,此时该字符已被读出),就进入状态2。 状态2是终态,它意指至此已识别出一个标识符,识别过程终止。若在状态0下输入符号不是字母,则意味着所给输入串不是一个标识符。 扫描程序的设计 下面用一个比较简单的语言作为例子来讨论扫描程序的设计。 假定该语言中有分界符或运算符(如+,-,*,/,(,)),关键字(如begin,abs,end),标识符(非保留字)以及整数。 至少要有一个空白符将相邻的标识符、整数和(或)关键字隔开,但不能用空白符将符号中的相邻字符分开。 此外,注解是以符号/*开始,并以符号*/的第一次出现作为结束的。 下表给出了这些符号的内部表示。 例 4.3 对于程序段 begin A+B*C/* Comment */ end 扫描程序将产生下面的结果: 状态转换图可用于识别符号串,而且使识别工作直观化。因此我们先画一个用于识别符号的转换图。 有关变量和函数的说明 (1)ch字符变量,存放当前读进的源程序字符。 (2)token字符数组,存放构成单词符号的字符串。 (3)getch()读字符函数,每调用一次从输入缓冲区中读进源程序的下一个字符放在ch中,并把读字符指针指向下一个字符。 (4)getbc()函数,每次调用时,检查ch中的字符是否为空白字符,若是空白字符,则反复调用getch()直至 ch中读入一个非空字符为止。 (5)concat()函数,每次调用把当前ch中读进的字符与token中的字符串连接。例如,假设token字符数组中原有值为“ab”,ch中存放着“c”, 调用concat()函数后,token字符数组中的值变为“abc”。 有关变量和函数的说明 (6)letter (ch) 和digit(ch)为布尔函数,它们分别判定ch中的字符是否为字母和数字,从而给出true或false布尔值。 (7)reserve()函数,对token中的字符串查关键字表,若为关键字,则返回它的种别码,否则返回输出标识符的种别码和它的值。 (8)reback ()函数,读字符指针回退一个字符。 (9)return()函数,收集并携带必要的信息返回调用程序,即返回到语法分析程序。 (10)dtb()十进制转换为二进制函数。 Scanner( ) { Token=null; Getch( ); Getbc( ); If (letter(ch)) { while(letter(ch)‖digit(ch)) { Concat( ); Getch( ); } reback( ); C=reserve( ); If(c!=1) return(c,token); Else return(1,token

文档评论(0)

dart001 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档