第三章_词法分析.pptx

第三章 词法分析;内容;3.1 对于词法分析器的要求;本章重点;5;3.1.1 词法分析器的功能和输出形式;3.1.1 词法分析器的功能和输出形式;例 FORTRAN程序 IF (5.EQ.M) GOTO 100 输出单词符号: 逻辑IF (34,-) 左括号 (2,-) 整常数 (20, ‘5’的二进制) 等号 (6,-) 标识符 (26, ‘M’) 右括号 (16,-) GOTO (30,-) 标号 (19, ‘100’的二进制);例 FORTRAN程序 DO 15 I=1,100 输出单词符号: DO (3,-) 标号 (19, ‘15’的二进制) 标识符 (26, ‘I’) 赋值号 (40,-) 整常数 (7, ‘1’的二进制) 逗号, (12,-) 整常数 (7, ‘100’的二进制);10;3.1.2词法分析是作为一个独立的阶段,是否应当将其处理为一遍呢?;3.1.2 词法分析器作为一个独立子程序;3.2 词法分析器的设计;3.2.1 输入、预处理;3.2.2 单词符号的识别:超前搜索;3.2.2 单词符号的识别:超前搜索;状态转换图:一种有效的词法分析工具;3.2.3 状态转换图;例:识别一个简单语言所有电磁符号的转换图;几点重要限制——为了不使用超前搜索 所有关键字都是保留字;用户不能用它们作自己的标识符 关键字作为特殊的标识符来处理;不用特殊的状态图来识别,只要查保留字表。 如果关键字、标识符和常数(或标号)之间没有确定的运算符或界符作间隔,则必须使用一个空白符作间隔。 DO99K=1,10 要写成 DO 99 K=1,10;出错情况;思想:每个状态结对应一小段程序。 做法: 1)对不含回路的分叉结,可用一个CASE语句或一组IF-THEN-ELSE语句实现 2)对含回路的状态结,可对应一段由WHILE结构和IF语句构成的程序 3)终态结表示识别出某种单词符号,因此,对应语句为 RETURN (C,VAL) 其中,C为单词种别,VAL为单词自身值;全局变量与过程 1) CHAR 字符变量、存放最新读入的源程序字符 2) TOKEN 字符数组,存放构成单词符号的字符串 3) GETCHAR 子程序过程,把下一个字符读入到CHAR中 4) GETNBC 子程序过程,跳过空白符,直至CHAR中读入一非空白符 5) CONCAT 子程序,把CHAR中的字符连接到TOKEN;全局变量与过程 6) LETTER 布尔函数,判断CHAR中字符是否为字母 7) DIGIT 布尔函数,判断CHAR中字符是否为数字 8) RESERVE 整型函数,对于TOKEN中的字符串查找保留字表,若它是保留字则给出它的编码,否则???送0 9) RETRACT 子程序,把搜索指针回调一个字符位置 10) DTB 函数,把TOKEN中的字符串翻译成二进制码;START: TOKEN:=; /*置TOKEN为空串*/ GETCHAR; GETNBC; CASE CHAR OF A..Z: BEGIN WHILE LETTER OR DIGIT DO BEGIN CONCAT;GETCHAR END; RETRACT; C:=RESERVE; IF C=0 THEN RETURN ($ID,TOKEN) ELSE RETURN (C,-) END;;0..9: BEGIN WHILE DIGIT DO BEGIN CONCAT;GETCHAR END; RETRACT; RETURN ($INT,DBT) END; =: RETURN ($ASSIGN,-); +: RETURN ($PLUS,-);;’*: BEGIN GETCHAR; IF CHAR=* THEN RETURN ($POWER,-); RETRACT; RETURN ($STAR,-); END; ,: RETURN ($COMMA,-); (: RETURN ($LPAR,-); ): RETURN ($RPAR,-); END OF CASE; ERROR; GOTO START;;;;3.1.1 词法分析器的功能和输出形式;3.1.2 词法分析器作为一个独立子程序;3.2 词法分析器的设计;状态转换图:一种有效的词法分析工具;正规表达式与有限自动机 ;3.3 正规表达式与有限自动机;∑*的子集U和V的连接(积)定义为;3.3.1 正规式与正规集;3.3.1 正规式与正规集;3.3.1 正规式与正规集;3.3.1 正规式与正规集;例3:?={d,?,e,+,-

文档评论(0)

1亿VIP精品文档

相关文档