单词的识别—状态转换图 n 状态转换图 有限方向图 u结点一一 状态,用O表示;终态,用回表示 u有向弧一 箭头 多读进了一个 u弧上标记 一输入字符 不属于标识符 n标识符的状态转换图 部分的字符 初态 字母 其它 终态 已识别出 字母或数字 一个标识符 28-二月-23 ☒>I
28-二月-23 11 单词的识别──状态转换图 n 状态转换图 有限方向图 u 结点 —— 状态,用○表示;终态,用◎表示 u 有向弧 ── 箭头 u 弧上标记 ── 输入字符 n 标识符的状态转换图 字母 字母或数字 初态 其它 * 终态 多读进了一个 不属于标识符 部分的字符 已识别出 一个标识符 0 1 2
例C语言无符号整数的描述 识别非零开头的十进制数的状态转换图 0-9 *十进制整数 其它 28-二月-23 ☒12
28-二月-23 12 例 C语言无符号整数的描述 识别非零开头的十进制数的状态转换图 0 1-9 1 0-9 其它 2 *十进制整数 0
空白 字母或数字 字母 标识符if sum 数字 其它 对简 数字 其它 用来 十进制整数 语 剑的 行 中 非 词 出错 析的 符号 赋值号:= 状态 转换 其它 图 出错 28-二月-23 ☒>3
28-二月-23 13 对简 单语 言进 行词 法分 析的 状态 转换 图 0 空白 字母 1 字母或数字 其它 2 * 标识符 if sum 数字 3 数字 其它 4 * 十进制整数 . 5 . + 6 + : 非 = 8 * 出错 = 9 赋值号:= . ) 12 ) 其它 13 出错 用来 识别 PL/0 语言 中的 单词 符号 7
利用状态转换图识别单词 1.从初态出发; 2.读入一字符: 3.按当前字符转入下一状态; 4.重复2,3直到无法继续转移; 5.若当前状态是终止状态,说明读入的字 符组成一单词;否则,说明输入不符合 词法规则。 28-二月-23 ☒>14
28-二月-23 14 利用状态转换图识别单词 1. 从初态出发; 2. 读入一字符; 3. 按当前字符转入下一状态; 4. 重复 2,3 直到无法继续转移; 5. 若当前状态是终止状态,说明读入的字 符组成一单词;否则,说明输入不符合 词法规则
词法分析器的设计p39 主要步骤 n首先画出词法分析的状态转换图。 n然后编制词法分析子程序getsym()。 n完成以下功能: u从输入流读取下一个单词。 u返回: (单词种别属性值) 基本字:一字一种(sym, 运算符:一符一种(sym, ) 标识符:全体一种(sym, id) 常数:全体一种 (sym, num) 界符:一符一种(sym, 28-二月-23 ☒15
28-二月-23 15 词法分析器的设计 p39 主要步骤 n 首先画出词法分析的状态转换图。 n 然后编制词法分析子程序 getsym( )。 n 完成以下功能: u 从输入流读取下一个单词。 u 返回:(单词种别 属性值) 基本字:一字一种(sym,_ ) 运算符:一符一种(sym,_ ) 标识符:全体一种(sym,id) 常 数:全体一种(sym,num) 界 符:一符一种(sym,_)