650 likes | 864 Views
第四章 词法分析. 编译原理. 计算机系 张熠. 4.1 词法分析程序的设计 词法分析 是编译的第一个阶段,它的主要任务是:从左至右逐个字符地对源程序进行扫描,产生一个个单词序列,用以语法分析。 单词 :语言中具有独立意义的最小单位,包括保留字、标识符、运算符、标点符号和常量等。. 4.1.1 词法分析程序的方式 ⑴、独立的一遍扫描,把 字符流 变成 单词序列 ,输出在一个 中间文件 上,并将这个文件作为 语法分析 程序的输入。 ⑵ 、设计成一个子程序,每当 语法分析 程序需要一个 单词 时,调用该子程序。
E N D
第四章 词法分析 编译原理 计算机系 张熠
4.1 词法分析程序的设计 • 词法分析是编译的第一个阶段,它的主要任务是:从左至右逐个字符地对源程序进行扫描,产生一个个单词序列,用以语法分析。 • 单词:语言中具有独立意义的最小单位,包括保留字、标识符、运算符、标点符号和常量等。 数学与信息工程学院 计算机系
4.1.1 词法分析程序的方式 • ⑴、独立的一遍扫描,把字符流变成单词序列,输出在一个中间文件上,并将这个文件作为语法分析程序的输入。 • ⑵ 、设计成一个子程序,每当语法分析程序需要一个单词时,调用该子程序。 • ⑵与⑴相比,将词法分析和语法分析放在同一遍里,从而省去了中间文件。 数学与信息工程学院 计算机系
词法分析独立于语法分析的原因: • 简化设计 • 改进编译效率 • 增加编译系统的可移植性 数学与信息工程学院 计算机系
4.1.2 词法分析程序的输出 • 词法分析程序读入源程序,输出单词符号。单词符号是一个程序设计语言的基本语法符号,一般可以分成以下5种(以C语言为例): • ⑴、关键字,如:int、bool、if、while、for等; • ⑵、标识符,如:常量名、变量名、函数名等; • ⑶、常数,如:25、3.14159、true、“hello”等; • ⑷、运算符,如:+,*,<,=等; • ⑸、界符,如:逗号、分号、括号等。 数学与信息工程学院 计算机系
单词符号的输出表示 • 二元式表示法:(单词种别,单词自身的值)。 • 例:int i=15; • 程序中单词“15”的种别是常数,值是15。 • 而对于单词“ i ”而言,不仅仅需要说明种别是标识符,还需要其他的一些信息,比如i的类别、层次等,这些信息统统收集在符号表中。 • 因此单词的二元式还可以表示成:(标识符,指向i的表项的指针)。 数学与信息工程学院 计算机系
例if i<5 • x = i ; • else • y = i ; • 请写出经词法分析器扫描后输出的单词符号和它们的二元式表示。 数学与信息工程学院 计算机系
4.1.3 词法分析工作的任务 • 主要任务 • 读源程序,产生单词符号; • 其他任务 • 滤掉空格,跳过注释、换行符; • 追踪换行标志,复制出错源程序; • 宏展开等。 数学与信息工程学院 计算机系
4.2 单词的描述工具 • 单词是程序设计语言的基本语法符号。 • 单词符号的词法可以用有效的工具加以描述,并且基于这类描述工具,可以建立词法分析技术,进而可以建立词法分析程序的自动构造方法。 • 多数程序设计语言的词法都能用正规文法(3型文法)来描述。 数学与信息工程学院 计算机系
4.2.1 正规文法(3型文法) • 文法G=(VN,VT,P,S),P中每一产生式的形式都为:A→aB 或A→a,其中A∈VN,B∈VN,a∈VT* • 例用正规文法描述C语言中的标识符 • l表示a-z,A-Z中一个字母或_,d表示0-9中的任一数字。 • S表示开始符号,即标识符,则正规文法的产生式如下: • S →lA A →lA A →dA A → 数学与信息工程学院 计算机系
4.2.2 正规式 • 正规式也称为正则表达式(regular expression),是表示正规集的工具,也是我们用以描述单词符号的方便工具。 • 定义 设Σ为一个字母表,那么 • 1、Φ是Σ上的一个正规表达式,它表示空集Φ; • 2、ε是Σ上的一个正规表达式,它表示字符串集合{ε}; • 3、∨a∈Σ,a是Σ上的一个正规表达式,它表示字符串集合{ a }; 数学与信息工程学院 计算机系
4、设r和s是Σ上的正规式,他们分别表示集合R和S,那么4、设r和s是Σ上的正规式,他们分别表示集合R和S,那么 • r|s, rs, r*, s* • 也是Σ上的正规表达式,它们分别表示集合 • R∪S, R●S, R*, S* 数学与信息工程学院 计算机系
例4.2令={a,b},上的正规式和相应的正规集 数学与信息工程学院 计算机系
练习: • 1、创建一个正规集和正规式,可以表示标识符。 • 解:正规集: = {l ,d }; • 正规式: r = l ( l d ) 。 • 2、创建一个正规集和正规式,可以表示无符号实数。 • 解:正规集: = {d,.,e,+,-}; • 正规式: d(. dd )(e(+- ) d d ) 数学与信息工程学院 计算机系
4.2.3 正规式的等价 • 若两个正规式e1和e2所表示的正规集相同,则说e1和e2等价,写作e1=e2。 • 如: e1= ab, e2 = ba; • b(ab) = (ba)b; • (ab) = (ab) ; 数学与信息工程学院 计算机系
4.2.4 正规文法和正规式的等价性 • 对 上的正规式r ,存在一个G=(VN,VT,P,S)使得L(G)=L(r) ,反之亦然。 不断应用上述规则做变换,直到每个产生式都符合正规文法的形式。 数学与信息工程学院 计算机系
例4.4将 r = a(ad)转换成相应的正规文法 • 令S是文法开始符号: • r = a(ad) =>S→aA 和 A → (ad) • =>S→aA A → (ad)A A → ε • => S→aA A → aA A → dA A → ε 数学与信息工程学院 计算机系
正规文法到正规式的转换规则 数学与信息工程学院 计算机系
例文法G[S]:S→aA S → a A → aA A → dA A → a A → d 请将其转化为正规式。 • S = aA | a 和 A = (aA | dA) | (a | d) • => A = ((a | d) A) | (a | d ) • => A = (a | d) * | (a | d ) • => S = a (a | d) * | (a | d ) | a • => S = a (a | d) * 数学与信息工程学院 计算机系
练习 将下列的正规式转换成正规文法 • 1、a(a|b|c)* • 2、(a|b)(b|c)* • 3、a(ab)* • 4、1(0|1)*01 数学与信息工程学院 计算机系
4.3 有穷自动机 • 有穷自动机(也称有限自动机)作为一种识别装置,它能准确地识别正规集,即识别正规文法所定义的语言和正规式所表示的集合,引入有穷自动机这个理论,正是为词法分析程序的自动构造寻找特殊的方法和工具。 • 确定的有穷自动机(DFA) • 不确定的有穷自动机(NFA) 数学与信息工程学院 计算机系
一个童年的问题 • 一位老农带着一条狗,一只鸡和一袋米要过河,河边只有一条小船,且船很小,每次最大只能允许一个人带上一件物品(狗、鸡或米)。人不在场的情况下,狗会把鸡吃掉,鸡会把米吃掉。请问人怎样借助这条小船分批把所有东西安全运送过河? 数学与信息工程学院 计算机系
4.3.1 确定的有穷自动机(DFA) • 一个确定的有穷自动机M是一个五元组:M=(K,Σ,f,S,Z)其中: • K是一个有穷集,它的每个元素称为一个状态; • Σ是一个有穷字母表,它的每个元素称为一个输入符号,所以也称Σ为输入符号字母表; • f是转换函数,是在K×Σ→K上的映射,如 f(ki,a)=kj,(ki∈K,kj∈K)就意味着,当前状态为ki,输入符为a时,将转换为下一个状态kj,我们把kj称作ki的一个后继状态; • S∈K是唯一的一个初态; • Z K是一个终态集,终态也称可接受状态或结束状态。 数学与信息工程学院 计算机系
例4.6M=({S,U,V,Q}, {a,b}, f, S, {Q})其中 f 定义为: f(S,a)= U f(V,a)= U f(S,b)= V f(V,b)= Q f(U,a)= Q f(Q,a)= Q f(U,b)= V f(Q,b)= Q 试画出其状态图和状态表。 数学与信息工程学院 计算机系
U a a a,b Q S b a V b b 数学与信息工程学院 计算机系
4.3.2 DFA识别正规文法的途径 • 对于∑*中的任何符号串t,若存在一条从初态结点到某一终态结点的道路,且这条路上所有弧标记符连接成的符号串等于t,则称t可为DFA M所接受。若M的初态结点同时又是终态结点,则空字可被M所接受。 • 符号串t(表示成t1tx)在DFA M上运行的定义: • f(Q, t1tx)= f(f(Q, t1), tx) 其中Q∈K 数学与信息工程学院 计算机系
例 证明 baab为例4.6的DFA所接受 • f(S,baab) =f(f(S,b),aab) • = f(V,aab) =f(f(V,a),ab) • = f(U,ab) =f(f(U,a),b) • = f(Q,b) = Q • Q属于终态。得证。 数学与信息工程学院 计算机系
练习 • 1、abaab是否为例4.6的DFA所接受; • 2、bbab是否为例4.6的DFA所接受; • 3、ab是否为例4.6的DFA所接受; • 4、ba是否为例4.6的DFA所接受。 数学与信息工程学院 计算机系
思考: • 1、构造一个DFA M 使其能够接受标识符; • 2、构造一个DFA M 使其能够接受偶数。 • 3、构造一个DFA M 使其能够接受定点实数(注:定点实数必须符合 dd*(.dd*| ε) 的格式,如 3.14,3均为定点实数,而“3.”,“.14”,“3.1.4”, “3ab”均不属于定点实数); 数学与信息工程学院 计算机系
4.3.3 不确定的有穷自动机(NFA) • 一个不确定的有穷自动机M是一个五元组:M=(K,Σ,f,S,Z)其中: • K是一个有穷集,它的每个元素称为一个状态; • Σ是一个有穷字母表,它的每个元素称为一个输入符号; • f 为K * 到K的子集的映像; • S K是非空初态集; • Z K是一个终态集。 数学与信息工程学院 计算机系
例4.7 一个NFA M=({0,1,2,3,4},{a,b},f,{0},{2,4})其中: • f(0,a) = {0,3} f(2,b) = {2} • f(0,b) = {0,1} f(3,a) = {4} • f(1,b) = {2} f(4,a) = {4} • f(2,a) = {2} f(4,b) = {4} • 试画出其状态图。 数学与信息工程学院 计算机系
4.3.4 NFA识别正规文法的途径 • 对于∑*中的任何符号串t,若存在一条从某一初态结点到某一终态结点的道路,且这条路上所有弧标记符连接成的符号串等于t,则称t可为NFA M所接受。若M的某些结点既是初态结点同时又是终态结点,则空字可被M所接受。 • DFA是NFA的特例,对于每个NFA M,存在一个DFA M’,使得L(M) = L(M’)。 数学与信息工程学院 计算机系
练习:例4.7中的NFA M能识别下列哪些字符串? • 1、abaa • 2、baabab 数学与信息工程学院 计算机系
4.3.5 NFA转换为等价的DFA • 设L为一个由不确定的有穷自动机接受的集合,则存在一个接受L的确定的有穷自动机。 • 例M = ( { S0, S1 }, { a, b }, f, S0, { S1 } ),其中 f 为 • f ( S0 , a ) = { S0,S1 } f ( S0 , b ) = { S1 } • f ( S1 , a ) = Ø f ( S1 , b ) = { S0,S1 } b a,b S0 S1 a b 数学与信息工程学院 计算机系
子集法 • 首先介绍几个相关的运算: • ⑴、状态集合I的ε-闭包,表示为ε-closure(I),定义为一状态集,是状态集I中的任何状态S经任意条ε弧而能到达的状态集合。 • ⑵、状态集合I的a弧转换,表示为move(I,a)定义为状态集合J,其中J是所有那些可以从I中的某一状态经过一条a弧而到达的状态的全体。 数学与信息工程学院 计算机系
利用子集法构造一个接受L(M)的DFA • 因为L(M)的初态为S0 ,故令: • T0 = ε-closure(S0) = {S0} ; • T1 = ε-closure(move(T0 ,a)) = {S0 ,S1} ; • T2 = ε-closure(move(T0 ,b)) = {S1} ; • T3 = ε-closure(move(T1 ,a)) = {S0 ,S1} = T1 ; • T4 = ε-closure(move(T1 ,b)) = {S0 ,S1} = T1 ; • T5 = ε-closure(move(T2 ,a)) = Ø • T6 = ε-closure(move(T2 ,b)) = {S0 ,S1} = T1 ; • 因为T3 = T1,T4 = T1 ,T5 = Ø ,T6 = T1 • 所以L(M’)的K={T0 ,T1 , T2 } ; 数学与信息工程学院 计算机系
∑={a, b}; • f : f(T0 , a) = T1 f(T0 , b) = T2 • f(T1 , a) = T1 f(T1 , b) = T1 • f(T2 , b) = T1 a,b b b T1 T2 T0 a 数学与信息工程学院 计算机系
练习:将以下的 NFA 转换为 DFA a a, b 1 0 a 数学与信息工程学院 计算机系
作业 将以下的 NFA 转换为 DFA V 0 0 0 0,1 0,1 Q 1 S Z 1 1 1 U 数学与信息工程学院 计算机系
例4.4带ε的有限自动机的转换 ε 2 3 a ε b ε ε ε a b 10 0 1 6 7 8 9 ε ε b 4 5 ε 数学与信息工程学院 计算机系
转换后的DFA M为: • K = { T0, T1 , T2 , T3 , T4 } • ∑ = { a, b } • f (T0 , a) = T1 f (T0 , b) = T2 • f (T1 , a) = T1 f (T1 , b) = T3 • f (T2 , a) = T1 f (T2 , b) = T2 • f (T3 , a) = T1 f (T3 , b) = T4 • f (T4 , a) = T1 f (T4 , b) = T2 • S = T0 • K = T4 数学与信息工程学院 计算机系
b 2 b b a a a b b 0 1 3 4 a a DFA M 的状态图 数学与信息工程学院 计算机系
4.3.6 确定有穷自动机的化简 • 没有多余状态及等价状态的,称之为最小有穷自动机。 • 多余状态: • ⑴、从该自动机的开始状态出发,任何输入串也不能到达的那个状态; • ⑵、从这个状态出发,没有通路到达终态。 数学与信息工程学院 计算机系
判断下列哪些状态为多余状态 a 4 b 2 a b 1 5 b 3 数学与信息工程学院 计算机系
两个状态s和t的等价条件 • ⑴、一致性:s 和 t 必须同时为可接受状态或不可接受状态; • ⑵、蔓延性:对于所有输入符号, s 和 t 必须转换到等价的状态里。 数学与信息工程学院 计算机系
b 2 b b a a a b b 0 1 3 4 a a • 等价状态的判断举例 • 一致性:0和4的状态是否等价; • 蔓延性:2和3的状态是否等价。 数学与信息工程学院 计算机系
例4.9 将下图的DFA M最小化 a a 6 4 a b a a b 7 5 b 1 a a b b 3 b 2 b 数学与信息工程学院 计算机系
化简后的DFA M’ a a 6 4 b a a b 1 a b 5 3 b b 数学与信息工程学院 计算机系