编译原理之词法分析.ppt

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

中国科大第三章词法分析本章内容词法分析器:把构成源程序的字符流翻译成记号流,还完成和用户接口的一些任务。围绕词法分析器的自动生成展开介绍正规式、状态转换图和有限自动机概念第三章词法分析词法分析器的任务是把构成源程序的字符流翻译成词法记号流。构造词法分析器的一种简单办法是用状态转换图来描述源语言词法记号的结构,然后手工把这种状态转换图翻译成为识别词法记号的程序。用这种方式可以产生高效的词法分析器。3.1词法分析器的角色词法分析是编译的第一阶段,它的主要任条是读输入字符流,产生用于语法分析的词法记号序列。3.1.1分离词法分析器的理由1.简化设计2提高编译效率3增加可移植性把词法分析从语法分析中分离出来的理由简化设计编译器的效率会改进编译器的可移植性加强便于编译器前端的模块划分3.1.2词法记号、模式、词法单元在谈论词法分析时,我们使用术语“词法记号”(简称记号)、“模式”和“词法单元”表示特定的含义在输入的字符流中有很多字符串,它们的记号是一样的。这样的字符串集合由叫做模式的规则来描述,模式匹配对应集合的任一字符串。模式的形式描述我们在下一节讨论。词法单元(lexeme),又称单词词素,是源程序的字符串,它由模式匹配为记号。3.1.2词法记号、模式、词法单元记号的例子词法记号 词法单元例举 模式的非形式描述var var varfor for forrelation ,=,=,… 或=或=或…id sum,count,D5 由字母开头的字母数字串num 3.1,10,3.8E12 任何数值常数literal “seg.error” 引号“和”之间的任意字符 串,但引号本身除外3.1.2词法记号及属性历史上词法定义中的一些问题忽略空格带来的困难 DO8I?3.75 DO8I?3.75DO8I?3,75关键字是否保留 IFTHENTHENTHEN=ELSE;ELSE…关键字、保留字和标准标识符的区别3.1.3词法记号的属性从上一小节我们知道,Pascal的6个关系算符都属于记号relation。因为从程序的语法是否正确的角度看,使用哪个关系算符都一样。但是从翻译成目标代码来考虑,不同的关系算符,其翻译结果是不一样的。因此词法分析器需要给记号以属性,用属性来记住记号的附加信息,以便需要时使用它们。概括地说,记号影响语法分析的决策,属性影响记号的翻译。3.1.3词法记号的属性属性值用二元组序列表示position:=initial+rate*60的记号和属性值: ?id,指向符号表中position条目的指针? ?assign_op,? ?id,指向符号表中initial条目的指针? ?add_op,+? ?id,指向符号表中rate条目的指针? ?mul_op,*? ?num,整数值60?3.1.3词法记号的属性单词符号是程序语言的基本语法单位,一般分为下面5种关键字(基本字):(个数确定,可全体编为一类,也可一字一类)标识符:(个数不确定,作为一类)常数:各种类型的常数。(个数不确定,按类型分类)运算符:如+、-、*、/、等。(个数确定,一符一类)界符:如,、;、(、)、:等。(个数确定,一符一类)3.1.4词法错误词法分析器对源程序采取非常局部的观点难以发现下面的错误 fi(a==f(x))…在实数是a.b格式下,可以发现下面的错误 123.紧急方式的错误恢复错误修补最小距离校正(1)删除一个多余的字符;(2)插入一个遗漏的字符;(3)用一个正确的字符代替一个不正确的字符;(4)交换两个相邻的字符。3.2输入缓冲区2.2.1缓冲区对2.2.2标记超前搜索技术3.3词法记号的描述一节提到,字符串集合由叫做模式的规则来描述。正规式是表示这些规则的一种重要方法,因此本节围绕正规式来介绍记号的描述与识别。在介绍正规式前,我们先给“语言”一个形式化的定义。3.3词法记号的描述3.3.1串和语言字母表:符号的有限集合,例:?={0,1}串:符号的有穷序列,例:0110,?语言:字母表上的一个串集,属于该语言的串称为该语言的句子或字 {?,0,00,000,…},{?},?句子:属于语言的串串的运算连接 xy,s?=?s=s积(指数) s0为?,si为si-1s(i

文档评论(0)

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

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

1亿VIP精品文档

相关文档