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