编译原理第二三章教材学习(希赛教育基础学院).doc

编译原理第二三章教材学习(希赛教育基础学院).doc

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

2.3 PL/0编译程序的词法分析   PL/0的词法分析程序GETSYM(图2.5)是一个独立的过程,其功能是为语法分析提供单词用的,是语法分析的基础,它把输入的字符串形式的源程序分割成一个个单词符号。为此PL/0编译程序设置了三个全程量的公用单元如下:   SYM:存放每个单词的类别,用内部编码形式表示。   ID:存放用户所定义的标识符的值。即标识符字符串的机内表示。   NUM:存放用户定义的数。   单词的种类有五种。   基本字:也可称为保留字或关键字,如BEGIN,END,IF,THEN等。   运算符:如:+、-、*、/、=、#、>=、<=等。   标识符:用户定义的变量名、常数名、过程名。   常数:如:10,25,100等整数。   界符:如:,、.、;、(、)等。   如果我们把基本字、运算符、界符称为语言固有的单词,而对标识符、常数称为用户定义的单词。那么经词法分析程序分出的单词,对语言固有的单词只给出类别存放在SYM中,而对用户定义的单词(标识符或常数)既给类别又给值,其类别放在SYM中,值放在ID或NUM中,全部单词种类由编译程序定义的纯量类型SYMBOL给出,也可称为语法的词汇表。如下面提到的IFSYM,THENSYM,IDENT,NUMBER均属SYMBOL中的元素。图 2.5 词法分析过程GETSYM 词法分析过程图2.5的GETSYM框图对应程序见PL/0编译程序文本中procedure getsym,其中对标识符和关键字(保留字)的识别方式为: 当识别到字母开头的字母数字串时,先查关键字表。若查不到则为标识符,查到则为关键字。PL/0编译程序文本中主程序开始对关键字表置初值如下:   关键字表为:   word[1]:=begin ;word[2]:=call ;   ...   word[13]:=write ;   每个数组元素的字符长度为10,不满10个字符时,以空格补满。   查到时找到关键字相应的内部表示为:   Wsym[1]:=beginsym; wsym[2]:=callsym;   …   wsym[13]:=writesym;   PL/0编译程序文本中开始对类型的定义中给出单词定义为:   type symbol=(nul,ident,number,plus,…,varsym,procsym);   定义单词是纯量/枚举类型,又定义了3个全程量为:   sym:symbol;   id:alfa;   num:integer;因此词法分析程序GETSYM将完成下列任务:   (1) 滤空格:空格在词法分析时是一种不可缺少的界符,而在语法分析时则是无用的,所以必须滤掉。   (2) 识别保留字:设有一张保留字表。对每个字母打头的字母、数字字符串要查此表。若查着则为保留字,将对应的类别放在SYM中。如IF对应值IFSYM,THEN对应值为THENSYM。若查不着,则认为是用户定义的标识符。   (3) 识别标识符:对用户定义的标识符将IDENT放在SYM中,标识符本身的值放在ID中。   (4) 拼数:当所取单词是数字时,将数的类别NUMBER放在SYM中,数值本身的值存放在NUM中。   (5) 拼复合词:对两个字符组成的算符   如:>=、=、<= 等单词,识别后将类别送SYM中。   (6) 输出源程序:为边读入字符边输出(可输出在文件中)。由于一个单词往往是由一个或几个字符组成的,所以在词法分析过程GETSYM中又定义了一个取字符过程GETCH(见图2.6),由词法分析需要取字符时调用。 图 2.6 取字符过程GETCH   GETCH 所用单元说明:   CH: 存放当前读取的字符,初值为空。   LINE: 为一维数组,其数组元素是字符,界对为180。用于读入一行字符的缓冲区。   LL和CC为计数器,初值为0。   GETSYM流程图的工作单元说明:   A:一维数组,数组元素为字符,界对[110]。   ID:同A。   WORD:保留字表,一维数组,数组元素是以字符为元素的一维数组。界对为[113]。查表方式采用二分法。   单个字符对应的单词表的建立是,首先在主程序中定义了下标为字符的数组ssym,数组ssym的元素为单词,主程序开始对下标为字符的所有数组元素置初值为nul,对PL/0语言用到的单个字符为单词的,将其字符作为数组下标的元素置初值为对应的单词。如:   ssym[+]:=plus; ssym[-]:=minus;   …   ssym[;]:=semicolon;2.4 PL/0编译程序的语法分析   PL/0编译程序语法、语义分析是整个编译程序设计与实现的核心部分,要求学员努力学习掌握实现技术和方法。现分别说明语

文档评论(0)

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

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

1亿VIP精品文档

相关文档