[工学]3词法分析.ppt

[工学]3词法分析

Lex中的冲突解决方法 当输入的多个前缀与一个或者多个模式匹配时,Lex按照如下规则解决冲突 总是选择最长的前缀 保证词法分析器把=当作一个词法单元识别 长度相等时,选择在Lex程序中首先被列出的模式 如果保留字对应的规则在标识符的规则之前,词法分析器将识别出保留字 第一次作业 3.3.2 (2,3) 3.3.5 (6, 9) 3.4.1(1,2,3) 3.5.2 3.6.5 (1) * * * * * * * * * * * * 一个模式匹配多个词素时,必须通过属性来传递附加的信息。属性值将被用于语义分析、代码生成等阶段。 不同的目的需要不同的属性。因此,属性值通常是一个结构化数据。 词法单元id的属性 词素、类型、第一次出现的位置、… * 每次读入一个字符都要判断是否到达缓冲区的末尾,及读入的字符是什么。想个合二为一的方法。 具体过程如下: 画该图于黑板 * * 关键字(keywords )、保留字 Token-name标识单词的种类,程序中的单词种类主要有: 1运算符(operators ) 2标识符(identifiers ) 3常数(constants ) 4字符串(literal strings ) 5标点符号(punctuation symbols ) * token-name——影响语法分析 属性——影响翻译 在很多情况下词法分析器不仅向语法分析器返回一个词法单元名字,还会返回一个描述该词法单元的词素的属性值,供语法分析之后对这个词法单元的翻译。 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * DFA的最小化---举例 A B D E C a b G1 G2 G3 G4 AC B D E No Change No Change No Change No change DFA的最小化---举例 A B D E C a b A B D E a b DFA的最小化---举例 D C A B b b a a a b b F a b A,C,D B,F a b b a a Minimized DFA: 过程 : 1st : 识别正规式的子式 ? ? symbols r | s rs r* 2nd : 构造各子式的NFA 3rd : 合并各子式的NFA 从RE ? NFA的变换 Thompson构造法 2. 对? 中的每个符号a, 构造 NFA a start i f L(a) 1. 对 ? 构造NFA L(? ) ? start i f i 和 f 是新的开始状态 和新的接受状态, 从i到N(s) 和 N(t) 的开始状态有空?转换 (? -moves) ; 从N(s) 和 N(t) 的接受状态到f也有有空?转换 (? -moves) 。 3.(a) 如果 N(s), N(t) 是正规式s, t 的NFA, 对正规式s|t 构造 NFA start ? i f ? N(s) N(t) ? ? L(s) ? L(t) Thompson构造法 3.(b)如果 N(s), N(t) 是正规式s, t 的NFA, 对正规式st 构造 NFA start i f N(s) N(t) L(s) L(t) 第二种形式: Overlap---重叠部分 N(s) ? start i f N(t) ? ? i 是N(s)的开始状态 ,也作为复合后的NFA的开始状态 f 是N(t) 的接受状态,也作为复合后的NFA的接受状态 N(s) 的接受状态和N(t)的开始状态合并,即N(t)的开始状态上转换变成了N(s) 接受状态上的转换 Thompson构造法 f N(s) ? start i ? ? ? i 是新的开始状态, f 是新的接受状态 i 到 f 增加一个? -move (接受空串) i 到 old start,old final(s) 到 f各增加一个? -move old final 到 old start一个增加? -move (WHY?) 3.(c)如果 N(s), N(t) 是正规式s, t 的NFA, 对正规式s* 构造NFA Thompson构造法 ? : a : b: ab: ? | ab : a* (? | ab )* : 从RE ? NFA的变换 Thompson构造法的性质 N(r) 的状态数? 2 (符号个数+ 运算符个数) of r N(r) 只有一个开始状态和一个接受状态 N(r) 的每个状态或者

文档评论(0)

1亿VIP精品文档

相关文档