3状态转换图的实现 ●思想:每个状态结对应一小段程序。 做法 1)对不含回路的分叉结,可用一个CASE语句或 组IF- THEN-ELSE语句实现 2)对含回路的状态结,可对应一段由WHIE结构 和IF语句构成的程序 3)终态结表示识别出某种单词符号,因此,对 应语句为 RETURN(C, VAL) 其中,C为单词种别,VAL为单词自身值
3 状态转换图的实现 思想:每个状态结对应一小段程序。 做法: 1)对不含回路的分叉结,可用一个CASE语句或 一组IF-THEN-ELSE语句实现 2)对含回路的状态结,可对应一段由WHILE结构 和IF语句构成的程序. 3)终态结表示识别出某种单词符号,因此,对 应语句为 RETURN (C,VAL) 其中,C为单词种别,VAL为单词自身值
●全局变量与过程 1)ch字符变量、存放最新读入的源程序字 符 2) strToken字符数组,存放构成单词符号 的字符串 3) GetChar子程序过程,把下一个字符读 入到ch中 4) GetBC子程序过程,跳过空白符,直至 ch中读入一非空白符 5) Concat子程序,把ch中的字符连接到 stroker
全局变量与过程 1)ch 字符变量、存放最新读入的源程序字 符 2)strToken 字符数组,存放构成单词符号 的字符串 3)GetChar 子程序过程,把下一个字符读 入到 ch 中 4)GetBC 子程序过程,跳过空白符,直至 ch 中读入一非空白符 5)Concat 子程序,把ch中的字符连接到 strToken
6) IsLetter和 IsDisgita1布尔函数,判断 ch中字符是否为字母和数字 7) Reserve整型函数,对于 str Token中 的字符串查找保留字表,若它实保留字则 给出它的编码,否则回送0 8) Retract子程序,把搜索指针回调一个 字符位置 9) Inserted整型函数,将 stroker中的标 识符插入符号表,返回符号表指针 10) InsertConst整型函数过程,将 str Token中的常数插入常数表,返回常数 表指针
6)IsLetter和 IsDisgital 布尔函数,判断 ch中字符是否为字母和数字 7) Reserve 整型函数,对于 strToken 中 的字符串查找保留字表,若它实保留字则 给出它的编码,否则回送0 8) Retract 子程序,把搜索指针回调一个 字符位置 9)InsertId 整型函数,将strToken中的标 识符插入符号表,返回符号表指针 10)InsertConst 整型函数过程,将 strToken中的常数插入常数表,返回常数 表指针
空白 字母或数字 字母 非字母与数 0 数字 数字 非数字 非* 8 10 12 其它
1 2 3 4 5 6 7 8 9 10 11 12 13 0 空白 字母 字母或数字 非字母与数字 数字 非数字 数字 = + * 非* , ( ) 其它 * * * *
int code. value strToken /*置 strtoken为空串米/ GetChar o: GetBCO if (isLetter o) begin while(isletter o or IsDigito) begin Concat: GetChar(; en d Retracto code: Reserve o if (code= 0) /*不在保留字表中*/ begin value :=InsertId(strToken) return (SID, value) end e⊥se return code en
int code, value; strToken := “ ”; /*置strToken为空串*/ GetChar(); GetBC(); if (IsLetter()) begin while (IsLetter() or IsDigit()) begin Concat(); GetChar(); end Retract(); code := Reserve(); if (code = 0) /*不在保留字表中*/ begin value := InsertId(strToken); return ($ID, value); end else return (code, -); end