编译原理(第2章 词法分析).ppt

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

词法分析程序的输出 词法分析程序的输出形式 单词符号的表示形式:二元式(单词种别,单词自身的值) 单词类别。 1、一类单词统一用一个整数值代表其属性。例如:1代表关键字,2代表标识符等。 2、 每一个单词一个类别。例如:1代表BEGIN,2代表END等。 单词自身的值。可以表示成:常量的二进制表示;常量、变量等在符号表种的地址码,等等。 词法分析输出形式示例 示例1: 程序段If i= 5 then x:=y; 关键字if (3,“if”) 标识符I (1,指向i的符号表入口) 等号= (4,‘=’) 常数5 (2,’5’) 关键字then(3,’then’) 标识符x (1,“指向x的符号表入口”) 赋值号:= (4, ‘:=’) 标识符y (1,“指向y的符号表入口”) 分号; (5,’;’) 词法分析与语法分析的关系 把词法分析从语法分析中脱离出来的优点: 简化设计。使编译程序的结构更加简洁、清晰和条理化。 编译效率改进。专门的读字符和分词技术;词法分析程序的自动构建。 编译程序的可移植性。与源语言的具体要求有关部分。 词法分析作为 独立一遍 or 独立子程序 词法分析程序过程 一些其他任务: 滤掉空格,跳过注释、换行符 追踪换行标志 记录行号 复制出错源程序 宏展开 输入缓冲区 超前搜索 关键字的识别: 例如在标准FORTRAN中 1、DO99K = 1,10 2、IF(5.EQ.M)I = 10 3、DO99K = 1.10 4、IF(5) = 55 示例:PL/0程序的词法分析设计 识别的单词: 保留字:如BEGIN、 END、 IF、 THEN等 标识符: 用户定义的变量名、常数名、过程名 常数: 如:10、25、100等整数 运算符: 如:+、-、*、/、:=、#、=、=等 界符: 如:‘,’、‘.’ 、‘;’ 、‘(’ 、‘)’等 示例: PL/0词法分析程序的设计 词法分析过程GETSYM所要完成的任务: 从源程序读字符(getch) 滤空格 识别保留字 识别标识符 拼数 识别单字符单词 拼双字符单词 识别其它 示例:PL/0词法分析程序的设计 问题 语言层出不穷,N种语言写N种编译程序 有没有可能在规则明确下快速地自动构造出词法分析器? 正则表达式简介 正规式也称正则表达式,是定义正规集的数学工具。 (“正则集的代数” ) 正则表达式(regular expression)用于描述或者匹配一系列符合某个句法规则的字符串。 正则表达式这个概念最初来自Unix中工具软件(例如sed和grep) 许多程序设计语言都支持利用正则表达式进行字符串操作。 由于正则表达式主要应用对象是文本,因此它在各种文本编辑器也都有应用。例:输入的邮件地址的格式是否正确 准备知识:集合运算 ∑* 的子集 U , V: 积 UV ={αβ|α∈ U β∈V } n次积 Vn= VVV… V V0 = {ε}空串 V的闭包 V* = V0 U V1 U V2 U … V的正则闭包 V+ = V V* 正规式与正规集的递归定义 (1)ε和Φ都是字母表∑上的正规式,它们所表示的正规集分别为{ε}和Φ; (2)任何a∈∑,a是∑上的一个正规式,它所表示的正规集为{a}; (3) 正规式 正规集 正规式 正规集   e1 L(e1) (e1|e2) L(e1)∪L(e2) e2 L(e2) (e1·e2) L(e1)L(e2) (e1)* L(e1)* (4)仅由有限次使用上述三步骤而得到的表达式才是∑上正规式。仅由这些正规式所表示的子集才是∑上的正规集。 示例:正规式 令?={a,b}, ?上的正规式和相应的正规集的例子(书P53页) 示例:程序设计语言中的正规式 例1 标识符的词法规则。比如:e123e123 令?={l,d} 则?上的正规式 r= l(l ?d) ?定义的正规集为: {l,ll,ld,ldd,……},其中l代表字母,d代表数字,正规式 即是 字母(字母|数字) ? ,它表示的正规集中的每个元素的模式是“字母打头的字母数字串” 即:多数程序设计语言允许的的标识符的词法规则. 例2 无符号整数的词法规则。比如:123 令?={d} 则?上的

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档