《编译原理及实践教程》第3章词法分析.ppt

《编译原理及实践教程》第3章词法分析.ppt

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

词法分析;主要内容:词法分析的任务,手工实现词法分析程序,正规式与有穷自动机,词法分析程序的自动生成

重点掌握:词法分析器的功能和接口,用状态转换图设计和实现词法分析程序,正规文法、正规式和有穷自动机的概念及相互转换;词法分析程序所处的位置:;3.1词法分析的任务和功能;单词的类型;单词的种别码;表3.1Sample语言单词的编码;单词的值:

可用多种方式给出:

对于“一字(一符)一种”单词:单词值可不给出(因单词的种别码唯一代表该单词)

一个类别有多个单词(标识符、常数):必须给出每个单词值,单词值可为单词符号串本身,也可为一个指针值(在符号表和常数表中的入口位置),常数的单词值也可以是自身常数的二进制数。

;;词法分析输出举例;;3.2词法分析程序的设计;3.2.1词法分析程序的接口;3.2.2词法分析程序的总体设计;;;详解“图3.4详细数据流图”

读入一行(加工1.1):从源程序文件读入一行,存入缓冲区(字符型数组),行计数器加1。

读一非空字符(加工1.2):从缓冲区读一个字符,列计数器加1,直到读取一个非空字符为止.若缓冲区已空,则再读一行到缓冲区,此时列计数器置0、行计数器加1.

字符分类(加工1.3):据单词首字符。

输出token串(加工1.4):对所有识别出的单词按二元形式输出(种别码,单词值)

识别标识符/关键字(加工1.5):当读入的单词首字符是字母时,开始识别标识符或关键字。形成单词后查关键字表。;识别数值型常数(加工1.6):当读入的单词首字符是数字时,开始识别整数或实数。

处理注释和除号(加工1.7):当读入的单词首字符是“/”时,开始识别注释和除号。

识别文字常数(加工1.8):当读入的单词首字符是单引号时,忽略单引号,开始拼写字符常数,直到下一个单引号结束,最后返回种别码

识别其他界符和运算符(加工1.9):

查填符号表(加工2):对标识符和常数识别后,要查填符号表(若表中没有,则加入表并填写属性等信息)。符号表的格式见3.2.5节的表3.2。;;;识别单词;3.2.4使用状态转换图来识别单词;识别过程是:从初始状态0开始,读取一个字符,若是字母,读??它,转入状态1,否则(不是字母)识别失败。在状态1,读取下一个字符,若为字母或数字,则读入它,仍处于状态1;在状态1读入的字符不是字母或数字,则转向状态2,结束一个标识符的识别过程。状态上的*表示多读入一个符号,指针应回退一个字符。;写成C语言的函数形式:

recog_id(charch)

{

charstate=0;

while(state!=2){

switch(state){

case0:ch=get_nextchar();

if(isletter(ch))state=1

elseerror();

break;

case1:ch=get_nextchar();

if(isletter(ch)||isdigit(ch))state=1

elsestate=2;

break;

}

}

return(gettoken());//返回识别的单词的token值(查表3.1)

};;;对图3.6(c)—无符号实数状态转换图改进:

使用不同的终态来表示不同单词的识别,不仅可靠性高,而且可据此来确定该数的属性,便于填入符号表

终态7:识别出错处理的终态

终态8:识别带指数的实数的终态

终态9:识别带小数的实数的终态

终态10:识别整数的终态;练习1;练习2;词法分析程序实现方法总结

首先对程序语言的单词按类构造出相应的状态转换图。

对各类状态转换图合并(如左图)。

根据状态转画图编写识别该类单词的函数(使用一个switchcase语句:每条分支对应一个case语句段),最终输出单词的token表(单词种别码,单词值)。

;1.符号表

符号表是一种数据结构,用于保存源程序中出现的名字及其相关的属性信息(种属、数据类型、值、地址)

符号表要在编译的多个阶段中操作,词法分析阶段只有一小部分可填写(单词名字及长度、类型等)

符号表的结构:如表3.2

如:字符串if(ab2)test=3;;2.符号表的实现方法;;3.2.6词法分析阶段的错误处理;单词

文档评论(0)

BraveMan + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档