- 1、本文档共25页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理(第三版) 陈火旺等编著 (2012年9月-12月) 主讲:朱世松 计算机学院 第三章 词法分析 词法分析的任务:从左至右逐个字符地对源程序进行扫描,产生一个个单词符号。 词法分析器(Lexical Analyzer) 又称扫描器(Scanner):执行词法分析的程序 3.1 对于词法分析器的要求 一、词法分析器的功能和输出形式 功能:输入源程序、输出单词符号 单词符号的种类: 基本字:如 begin,repeat,? 标识符——表示各种名字:如变量名、数组名和过程名 常数:各种类型的常数 运算符:+,-,*,/,? 界符:逗号、分号、括号和空白 输出的单词符号的表示形式: (单词种别,单词符号的属性值) 单词种别通常用整数编码表示。 若一个种别只有一个单词符号,则种别编码就代表该单词符号。假定基本字、运算符和界符都是一符一种。 若一个种别有多个单词符号,则对于每个单词符号,给出种别编码和自身的值。 标识符单列一种;标识符自身的值表示成按机器字节划分的内部码。 常数按类型分种;常数的值则表示成标准的二进制形式。 例 C程序代码 while (i=j) i--; 输出单词符号: while , - ( , - id , 指向i的符号表项的指针 = , - id , 指向j的符号表项的指针 ) , - id , 指向i的符号表项的指针 - - , - ; , - 二、词法分析器作为一个独立子程序 词法分析作为一个独立的阶段,是否应当将其处理为一遍呢? 作为独立阶段的优点:结构简洁、清晰和条理化,有利于集中考虑词法分析一些枝节问题。 不作为一遍:将其处理为一个子程序。 (当语法分析器需要一个单词符号时就调用这个子程序) 词法分析器的结构 输入串放在输入缓冲区中。 预处理子程序:剔除无用的空白、跳格、回车和换行等编辑性字符等 扫描缓冲区 二、单词符号的识别:超前有哪些信誉好的足球投注网站 1 基本字识别: 例如: DO99K=1,10 DO 99 K = 1,10 IF(5.EQ.M)GOTO55 IF (5.EQ.M) GOTO 55 DO99K=1.10 IF(5)=55 需要超前有哪些信誉好的足球投注网站才能确定哪些是基本字 2 标识符识别: 字母开头的字母数字串,后跟界符或算符 3 常数识别: 识别出算术常数并将其转变为二进制内码表示。有些也要超前有哪些信誉好的足球投注网站。 5.EQ.M 5.E08 4 算符和界符的识别 把多个字符符合而成的算符和界符拼合成一个单一单词符号。 :=, **, .EQ. , ++,--,= 三、状态转换图 1 概念 状态转换图是一张有限方向图。 一个状态转换图可用于识别(或接受)一定的字符串。 2 例子 几点重要限制——不必使用超前有哪些信誉好的足球投注网站 所有基本字都是保留字;用户不能用它们作自己的标识符 基本字作为特殊的标识符来处理;不用特殊的状态图来识别,只要查保留字表。 如果基本字、标识符和常数(或标号)之间没有确定的运算符或界符作间隔,则必须使用一个空白符作间隔。 DO99K=1,10 要写成 DO 99 K=1,10 3 状态转换图的实现 思想:每个状态结点对应一小段程序。 做法: 1)对不含回路的分叉结,可用一个CASE语句或一组 if-else 语句实现 2)对含回路的状态结,可对应一段由WHILE结构和IF语句构成的程序. 3) 终态结表示识别出某种单词符号,因此,对应语句为 RETURN (C,VAL) 其中,C为单词种别,VAL为单词自身值. 全局变量与过程 1)ch 字符变量、存放必威体育精装版读入的源程序字符 2)strToken 字符数组,存放构成单词符号的字符串 3)GetChar 子程序过程,把下一个字符读入到ch中 4)GetBC 子程序过程,跳过空白符,直至ch中读入一非空白符 5)Concat 子程序,把ch中的字符连接到 strToken 6)IsLetter和 IsDigit 布尔函数,判断ch中字符是否为字母和数字 7) Reserve 整型函数,对于 strToken 中的字符串查找保留字表,若它是保留字则给出它的编码,否则回送0 8) Retract 子程序,把有哪些信誉好的足球投注网站指针回调一个字符位置 9)InsertId 整型函数,将strToken中的标识符插入符号表,返回符号表指针 10)InsertConst 整型函数过程,将strToken中的常数插入常数表,返回常数表指针。 int code, value; strToken := “”; /*置strToken为空串*/ GetChar(); GetBC(); if (IsLetter())
文档评论(0)