cha3词法分析white.ppt

cha3词法分析white.ppt

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

文档评论(0)

1亿VIP精品文档

相关文档