一个微小的编译器.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一个微小的编译器

3.3.1 状态分离法 将DFA的所有状态K按终态和非终态划分成两个子集Z与K-Z,构成初始化分,记作:?={Z, K-Z}。 设当前的划分?中已经含有m个子集: ?={I1,I2,…,Im}对于每一个子集Ii={Si1,Si2,…,Sin}及每一个a??,设Iin=f(Ii,a)=f(Si1,a)?f(Si2,a)?…?…f(Sin,a)若Iin中的状态分别落在?中p个不同的子集,则根据转移状态相同与否将Ii分为p个子集得到新的划分?new。 若?new? ?, 则将?new作为?重复2,直到?不能划分。 将最后所得到的划分?中的每个子集看成一个状态,对边作相应修改,确定开始状态和结束状态。 * 3.3.2 DFA化简 例1 * 思考:将如下DFA化简 * a C D B A E F S b a a a a a b b b b b a b F * S B A C,D,E,F b a b b a a a,b C,D,E,F 3.4 正则表达式与FA等价 定理:对任一确定有限自动机A,存在一正 则表达式e,使得L(A)=L(e),反之亦然。 关系图: * DFA 正则表达式 NFA 1 2 a b 1 2 a | b 1 2 b* 1 2 3 a b 1 2 a b 1 2 3 ? b ? X W W ? 3.4.1 正则表达式到DFA的转换 * 3.4.2 DFA到正则表达式的转换 * 1 2 3 a b 1 2 a b 1 2 3 1 3 a b 1 2 a | b 1 3 a b* c a b c 思考1 设计DFA以识别能够被4整除的二进制数。 * 0 1 2 0 0 1 1 1 0 3 1 0 0 思考2 设计DFA以识别所有能被3整除的无符号十进制数。 * 0 1 2 3,6,9 3,6,9 1,4,7 0 2,5,8 2,5,8 1,4,7 2,5,8 3,6,9 1,4,7 思考3 设计识别C语言实型常数的自动机。 * 设计:单词分类、正则表达式法、自动机法 实现:转换矩阵法、转换图法、几个细节问题、构造步骤 * 4.1 单词分类 标识符:标识符一般是由字母开头,字母、数字或其它符号的任意组合构成的。 常量:用来表示各种常量。主要包括整数常数实数常数、字符串常量等。 特殊符号:包括保留字、运算符和界限符。 保留字一般是由语言系统自身定义的通常是由字母组成的字符串。 运算符表示序中算术运算、逻辑运算、字符运算、赋值运算的确定的字符或字符串。 界限符包括各种括号,命令结束符号等。 格式符包括EOF,回车等符号。 * 4.1.1 正则表达式描述 标识符:L(L|D)* 其中L=[a-z, A-Z], D=[0-9] 整数:D1D*|0, 其中D1=[1-9] 特殊符号:+|;|:|:= ||= | … 保留字:if | else | … * 4.1.2 有限自动机描述 按类构造出相应的状态转换图。 合并各类单词的状态转换图,构成一个能识别语言所有单词的状态转换图。 将各类单词的状态转换图的初始状态合并为一个唯一的初始状态; 化简调整状态冲突和对冲突状态重新编号; 如果有必要,增加出错状态。 * 自动机设计实例 * 抽象后的DFA * 0 1 6 7 2 3 4 5 I D I D D D _ D D D D + - . . . _ space 4.2.1 状态转换矩阵法 把自动机看作一种数据结构(状态转换矩阵),由控制程序控制字符在其上运行,从而完成词法分析。 State=InitState; Read(CurrentChar); While(T(State,CurrentChar)error CurrentChar Eof){State=T(State, CurrentChar); Read(CurrentChar); } if (State?FinalStates){Accept;} else {Error;} 特点 程序短小,但占用存储空间多。 * 4.2.2 状态转换图法 每个状态对应一个带标号的case语句转向边对应goto语句 特点:程序长,但占用存储空间少 * a b Li: case CurrentChar of a :goto Lj b :goto Lk other :Error( ) i j k 4.3 特殊处理 保留字识别 符合单词、数 控制字符、注释 语义信息存储 * 4.3.1 保留字识别 统一识别 事先构造好保留字表。在进行词法分析时,把保留字也当作一般标识符来识别,然后查保留字表,若有,则把它作为保留字来处理;若没有,则按一般标识符来处理。 单独识别 在自动机中加入识别各个保留字的状态,即把保留字和一般标识符分开来识别而不统一识别。

文档评论(0)

zhuwo + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档