编译原理课程之词法分析详解.ppt

  1. 1、本文档共106页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
词法分析;主要内容:词法分析的任务,手工实现词法分析程序,正规式与有穷自动机,词法分析程序的自动生成 重点掌握:词法分析器的功能和接口,用状态转换图设计和实现词法分析程序,正规文法、正规式和有穷状态自动机的概念及相互转换;词法分析程序所处的位置:;3.1 词法分析器的功能;单词:是语言中具有独立意义的最小单位,常用单词分类: 保留字:具有固定意义的标识符 运算符 界符 标识符:表示各种名字 常数 对于一个程序设计语言,保留字、运算符和界符都是确定的,可以给以固定的编号(种别码)。 标识符是根据构词规则定义的,常数是符合定义的各种类型的常数;;某语言单词的种别码定义举例;词法分析器的输出;{this is a sample program writing in simple language} program example1; {used for illustrating compiling process} var a,b,c:integer; x:char; begin if (a+c*3 b) and (b3) then c:=3; end.;;;;3. 其它输出:错误信息和源程序清单 错误信息应该详细,准确,指出出错的具体行、列位置,发生了哪类错误等,方便用户修改 ;错误处理;词法错误类型;词法分析是编译过程中的一个阶段,在语法分析前进行。可以作为一个独立的子程序,独立出来的原因: 简化设计 改进编译效率 增加编译系统的可移植性 可以和语法分析结合在一起作为一遍,由语法分析程序调用词法分析程序来获得当前单词供语法分析使用。;3.2 词法分析程序的设计;词法分析程序的接口;;;识别单词前作如下假定: 关键字就是保留字 单词中间不能有分界符(如空格、空白、界符和算符等) 单词中间不能有注释 单词必须在一行内写完,换行后认为是另一个单词 一个单词不能超过规定长度;识别单词;单词的构成规则用状态转换图表示;一个状态图可用于识别一定的字符串,大多数程序设计语言的单词符号都可以用转换图来识别。;写成C语言的函数形式: recog_id() { … char state = 0; ch = getch(); do { switch(state){ Case 0: if ch 是字母 state = 1; ch = getch();break; Case 1: if ch 是字母或数字 { state = 1; ch = getch(); } else state = 2; break; } } while (state != 2); 回退一个符号。 };;练 习 1;;练 习 2;练 习 3;状态转换图的实现:使用一个switch case 语句:每条分支对应一个case语句段 见书P45 例;词法分析器的自动生成;3.3 正规文法、正规式与有限自动机;为了讨论词法分析程序的自动生成问题,将状态转换图加以形式化。;一、正规文法;结论:每一种程序设计语言,都有它自己的字符集V,语言中的每一个单词或者是V上的单个字符,或者是V上的字符按一定方式组成的字符串。组成方式就是对字符或字符串进行(连接)“.”、或“|”(并)、或“*/+”闭包运算。;二、正规式;正规式和正规集的递归定义:(设字母表为?) 1、 ?和?都是?上的正规式,表示{?}和{ }; 2 、任何a? ?,则a是正规式,表示{a}; 3 、假定r和s都是?上的正规式,分别表示语言 L(r)和L(s): a) (r) | (s)是正规式,表示L (r) U L (s) ; b) (r)(s)是正规式,表示L (r)L (s); c) (r)*是正规式,表示(L (r) )*; d) (r)是正规式,表示L (r); 4、有限次使用上述三步骤而定义的表达式才是?上的正规式,仅由这些正规式所表示的集合才是?上的正规集。; ?——或;? ——连接;? ——闭包 规定优先顺序为“?”、“? ”、“?” ;例1:令?={a,b}, ?上的正规式和相应的正规集有:;程序设计语言的单词都能用正规式来定义. 例2:令?={l,d},l 代表字母,d 代表数字,则?上的正规式: r = l(l?d)? 定义的正规集为: {l,ll,ld,lll,ldd,……},就是Pascal和 多数程序设计语言允许的的标识符的词法规则。;练 习;思考题: ?={d,. },则?上表示无符号数的正规式是什么?(不考虑含e的科学计数法,其中d为0~9的数

文档评论(0)

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

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

1亿VIP精品文档

相关文档