10-Ch03-Lexical_Analysis.pptVIP

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

College of Computer Copyright ? SE Dept GPC Ch03 Lexical Analysis 实验一:词法分析器(扫描器) 词法分析器:编译程序中完成词法分析任务的程序段。 词法分析器任务:对源程序进行扫描,从中识别出一个个的单词符号(又称扫描器) ,并把源程序转换为等价的内部表示形式。 功能: 读入源程序字符串;识别单词(符号); 转换成属性字; 一些其他的简单工作:删除注解,预加工处理 词法分析器作为一个独立部分 一般把词法分析器作为编译程序的一个独立部分 优点:可使编译程序的结构更简洁、清晰和条理化。 理由:词法分析比语法分析要简单得多,可用更有效的特殊方法和工具进行处理。有些语言的词法分析工作比较别扭。把词法分析作为一个独立部分就有助于集中力量考虑这些枝节问题。 词法分析器作为独立子程序 将词法分析器作为一个独立部分并不意味我们必须把词法分析器作为独立的一遍,这种做法意味着我们必须在外存中保存整个源程序的内码形式,这是没有必要的。 我们可以把词法分析安排成一个独立子程序,每当语法分析器需要一个单词符号时就调用这个子程序。每一次调用,词法分析器就从输入串终识别出一个单词符号,把它交给语法分析器。 单词符号 程序设计语言中最基本语法单位和最小语义单位。 五类: 关键字(保留字/基本字):if、while… 标识符:常量名、变量名 常数:34、56.78 运算符:+-/AND… 界限符:,、;、(、)… 单词符号的机内表示 机内表示形式: 单词类别 通常按照语法分析的需要设置,用整数表示。常用:各关键字,标识符,常数,各运算符,各分界符 单词自身值 属性值,用于语义分析和翻译,补充说明单词语义。常用:常数的值,标识符的名字等 有关单词符号输出形式的假定 1、关键字: 一个字符对应一个类别码 2、运算符:一个字符对应一个类别码 3、分界符:一个字符对应一个类别码 4、标识符: 类别码:1; 属性值:内部码 5、常 数: 类别码:2; 属性值:二进制 由状态图构造的词法分析程序 由状态图构造的词法分析程序 init :arr:=‘’;getch;getnbc; case ch of ‘a’…’z’ : begin while letter or digit do begin concat ; getch end; retract; c=reserve; if c=0 then return (1,arr) else return(c, ) end; 由正规文法设计词法分析程序 1、程序语言词法规则 转化为 正规文法 2、正规文法 转化为 FA 3、NDFA 转化为 DFA 4、DFA 最简化 5、确定单词符号输出形式 6、化简了的DFA+单词符号输出形式表构造词法分析程序 由正规文法设计词法分析程序 程序举例:见演示。 常见编程方法: 1、对待保留字的问题。 2、程序的组织结构问题。 -将状态蕴涵在程序中。 -为当前状态设置一个当前的变量。 由正规文法设计词法分析程序 模拟这个DFA,编写代码。 -将状态蕴涵在程序中。 -为当前状态设置一个变量。 由正规文法设计词法分析程序 {starting in state 1} If the next character is a letter then advanced the input; {now in state 2} while the next character is a letter or a digit do advanced the input; {stay in state 2} end while; {go to state 3 without advancing the input} accept; else {error or other case;} End if; 由正规文法设计词法分析程序 state :=1{start} while state =1 or 2 do case state of 1: case input character of letter: advance the input; state:=2; else state :=…{error or other} end case;

文档评论(0)

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

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

1亿VIP精品文档

相关文档