cha词法分析white.ppt

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

第三章 词法分析 设计词法分析程序 单词的描述工具(正规表达式) 单词的识别工具(有限自动机) 4.1 对于词法分析器的设计 4.2 单词的描述工具 4.3 有穷自动机 4.4 正规式和有穷自动机的等价性 4.5 正规文法和有穷自动机的等价性 4.6 词法分析程序的自动构造工具 本章练习 作业 词法分析(lexical analysis)p38 主要任务 从左至右逐个字符地对源程序进行扫描,产生 一个个的单词符号,把作为字符串的源程序改 造成为单词符号串的中间程序 或者说:逐个读入源程序字符,并按照词法规 则分割成一系列单词,再转换成单词串,同时 进行词法检查 4.1 对于词法分析器的要求 p50 功能:输入源程序,输出单词符号 单词符号一般可分为下列五种: 关键字 C语言main int void 标识符 变量名 数组名 函数名 常数 100 3.14159 ‘a’ 运算符 + - * / 界符 ,;( ) /* */ 单词符号的输出形式 p50 二元式(单词种别,单词自身的值) 单词符号的输出形式 p51 二元式(单词种别,属性值) 例 C++代码段及对应的单词符号序列 p38 while (i=j) i- -; 词法分析器的组织方法 p50 作为单独的一遍,在语法分析前进行 与语法分析结合在一起作为一遍 作为语法分析程序的一个子程序,每次调用识别 一个单词,交给语法分析器使用 词法分析器的设计 作为单独一遍考虑 输入: 输入串放在输入缓冲区 单词符号的识别:超前搜索 单词的识别──状态转换图 状态转换图 有限方向图 结点 —— 状态,用○表示;终态,用◎表示 有向弧 ── 箭头 弧上标记 ── 输入字符 标识符的状态转换图 例 C语言无符号整数的描述 识别非零开头的十进制数的状态转换图 对简 单语 言进 行词 法分 析的 状态 转换 图 利用状态转换图识别单词 1. 从初态出发 2. 读入一字符 3. 按当前字符转入下一状态 4. 重复 2,3 直到无法继续转移 5. 若当前状态是终止状态,说明读入的字 符组成一单词;否则,说明输入不符合 词法规则 词法分析器的设计 主要步骤 首先画出词法分析的状态转换图 然后编制词法分析子程序 scan( ) 完成以下功能: 从输入流读取下一个单词 返回:单词种别(code) 属性值(value) 词法分析器的流程图P19 词法分析器的实现__所需变量和过程 1 ch 字符变量,存放最新读进的源程序字符 2 strToken 字符数组,存放构成单词符号的字符串 例如 strToken=“AB” 3 GetChar 读入字符过程,将下一个输入字符读到 ch中,搜索指示器前移一个字符位置 4 GetBC 判断ch中字符是否为空白。若是,则调 用GetChar直至ch中进入一个非空白字符 例如 ch=‘C’ 5 Concat 组合符号过程,将ch中的字符连接到 strToken之后 例如 “AB”+‘C’ = “ABC” 所需变量和过程 6 IsLetter和IsDigit 判断ch中字符是否为字母 和数字的布尔函数过程 7 Reserve函数 对strToken中字符串查找保留 字表,若是保留字则返回它的编 码,否则返回0值 8 Retract过程 将搜索指示器回调一个字符位 置,将ch置为空白字符 9 InsertId函数 将strToken中标识符插入符号 表,返回符号表指针 10 InsertConst函数 将strToken中常数插入常 数表,返回常数表指针 词法分析器可构造如下 int code,value; strToken:=“ ”; //置strToken为空串 GetChar();GetBC();//读入空白直到ch为一个非空白字符 if(IsLetter())//ch中是字母,进入关键字和标识符的识别 begin while (IsLetter() or IsDigit()) begin Concat();GetChar();//组合标识符,读入下一字符 end Retract(); //回退字符 code:=Reserve();/

文档评论(0)

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

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

1亿VIP精品文档

相关文档