1 / 65

编译原理

第四章 词法分析. 编译原理. 计算机系 张熠. 4.1 词法分析程序的设计 词法分析 是编译的第一个阶段,它的主要任务是:从左至右逐个字符地对源程序进行扫描,产生一个个单词序列,用以语法分析。 单词 :语言中具有独立意义的最小单位,包括保留字、标识符、运算符、标点符号和常量等。. 4.1.1 词法分析程序的方式 ⑴、独立的一遍扫描,把 字符流 变成 单词序列 ,输出在一个 中间文件 上,并将这个文件作为 语法分析 程序的输入。 ⑵ 、设计成一个子程序,每当 语法分析 程序需要一个 单词 时,调用该子程序。

avi
Download Presentation

编译原理

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第四章 词法分析 编译原理 计算机系 张熠

  2. 4.1 词法分析程序的设计 • 词法分析是编译的第一个阶段,它的主要任务是:从左至右逐个字符地对源程序进行扫描,产生一个个单词序列,用以语法分析。 • 单词:语言中具有独立意义的最小单位,包括保留字、标识符、运算符、标点符号和常量等。 数学与信息工程学院 计算机系

  3. 4.1.1 词法分析程序的方式 • ⑴、独立的一遍扫描,把字符流变成单词序列,输出在一个中间文件上,并将这个文件作为语法分析程序的输入。 • ⑵ 、设计成一个子程序,每当语法分析程序需要一个单词时,调用该子程序。 • ⑵与⑴相比,将词法分析和语法分析放在同一遍里,从而省去了中间文件。 数学与信息工程学院 计算机系

  4. 词法分析独立于语法分析的原因: • 简化设计 • 改进编译效率 • 增加编译系统的可移植性 数学与信息工程学院 计算机系

  5. 4.1.2 词法分析程序的输出 • 词法分析程序读入源程序,输出单词符号。单词符号是一个程序设计语言的基本语法符号,一般可以分成以下5种(以C语言为例): • ⑴、关键字,如:int、bool、if、while、for等; • ⑵、标识符,如:常量名、变量名、函数名等; • ⑶、常数,如:25、3.14159、true、“hello”等; • ⑷、运算符,如:+,*,<,=等; • ⑸、界符,如:逗号、分号、括号等。 数学与信息工程学院 计算机系

  6. 单词符号的输出表示 • 二元式表示法:(单词种别,单词自身的值)。 • 例:int i=15; • 程序中单词“15”的种别是常数,值是15。 • 而对于单词“ i ”而言,不仅仅需要说明种别是标识符,还需要其他的一些信息,比如i的类别、层次等,这些信息统统收集在符号表中。 • 因此单词的二元式还可以表示成:(标识符,指向i的表项的指针)。 数学与信息工程学院 计算机系

  7. 例if i<5 • x = i ; • else • y = i ; • 请写出经词法分析器扫描后输出的单词符号和它们的二元式表示。 数学与信息工程学院 计算机系

  8. 4.1.3 词法分析工作的任务 • 主要任务 • 读源程序,产生单词符号; • 其他任务 • 滤掉空格,跳过注释、换行符; • 追踪换行标志,复制出错源程序; • 宏展开等。 数学与信息工程学院 计算机系

  9. 4.2 单词的描述工具 • 单词是程序设计语言的基本语法符号。 • 单词符号的词法可以用有效的工具加以描述,并且基于这类描述工具,可以建立词法分析技术,进而可以建立词法分析程序的自动构造方法。 • 多数程序设计语言的词法都能用正规文法(3型文法)来描述。 数学与信息工程学院 计算机系

  10. 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 →  数学与信息工程学院 计算机系

  11. 4.2.2 正规式 • 正规式也称为正则表达式(regular expression),是表示正规集的工具,也是我们用以描述单词符号的方便工具。 • 定义 设Σ为一个字母表,那么 • 1、Φ是Σ上的一个正规表达式,它表示空集Φ; • 2、ε是Σ上的一个正规表达式,它表示字符串集合{ε}; • 3、∨a∈Σ,a是Σ上的一个正规表达式,它表示字符串集合{ a }; 数学与信息工程学院 计算机系

  12. 4、设r和s是Σ上的正规式,他们分别表示集合R和S,那么4、设r和s是Σ上的正规式,他们分别表示集合R和S,那么 • r|s, rs, r*, s* • 也是Σ上的正规表达式,它们分别表示集合 • R∪S, R●S, R*, S* 数学与信息工程学院 计算机系

  13. 例4.2令={a,b},上的正规式和相应的正规集 数学与信息工程学院 计算机系

  14. 练习: • 1、创建一个正规集和正规式,可以表示标识符。 • 解:正规集: = {l ,d }; • 正规式: r = l ( l  d )  。 • 2、创建一个正规集和正规式,可以表示无符号实数。 • 解:正规集: = {d,.,e,+,-}; • 正规式: d(. dd   )(e(+- ) d d ) 数学与信息工程学院 计算机系

  15. 4.2.3 正规式的等价 • 若两个正规式e1和e2所表示的正规集相同,则说e1和e2等价,写作e1=e2。 • 如: e1= ab, e2 = ba; • b(ab) = (ba)b; • (ab) = (ab) ; 数学与信息工程学院 计算机系

  16. 4.2.4 正规文法和正规式的等价性 • 对  上的正规式r ,存在一个G=(VN,VT,P,S)使得L(G)=L(r) ,反之亦然。 不断应用上述规则做变换,直到每个产生式都符合正规文法的形式。 数学与信息工程学院 计算机系

  17. 例4.4将 r = a(ad)转换成相应的正规文法 • 令S是文法开始符号: • r = a(ad) =>S→aA 和 A → (ad) • =>S→aA A → (ad)A A → ε • => S→aA A → aA A → dA A → ε 数学与信息工程学院 计算机系

  18. 正规文法到正规式的转换规则 数学与信息工程学院 计算机系

  19. 例文法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) * 数学与信息工程学院 计算机系

  20. 练习 将下列的正规式转换成正规文法 • 1、a(a|b|c)* • 2、(a|b)(b|c)* • 3、a(ab)* • 4、1(0|1)*01 数学与信息工程学院 计算机系

  21. 4.3 有穷自动机 • 有穷自动机(也称有限自动机)作为一种识别装置,它能准确地识别正规集,即识别正规文法所定义的语言和正规式所表示的集合,引入有穷自动机这个理论,正是为词法分析程序的自动构造寻找特殊的方法和工具。 • 确定的有穷自动机(DFA) • 不确定的有穷自动机(NFA) 数学与信息工程学院 计算机系

  22. 一个童年的问题 • 一位老农带着一条狗,一只鸡和一袋米要过河,河边只有一条小船,且船很小,每次最大只能允许一个人带上一件物品(狗、鸡或米)。人不在场的情况下,狗会把鸡吃掉,鸡会把米吃掉。请问人怎样借助这条小船分批把所有东西安全运送过河? 数学与信息工程学院 计算机系

  23. 数学与信息工程学院 计算机系

  24. 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是一个终态集,终态也称可接受状态或结束状态。 数学与信息工程学院 计算机系

  25. 例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 试画出其状态图和状态表。 数学与信息工程学院 计算机系

  26. U a a a,b Q S b a V b b 数学与信息工程学院 计算机系

  27. 数学与信息工程学院 计算机系

  28. 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 数学与信息工程学院 计算机系

  29. 例 证明 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属于终态。得证。 数学与信息工程学院 计算机系

  30. 练习 • 1、abaab是否为例4.6的DFA所接受; • 2、bbab是否为例4.6的DFA所接受; • 3、ab是否为例4.6的DFA所接受; • 4、ba是否为例4.6的DFA所接受。 数学与信息工程学院 计算机系

  31. 思考: • 1、构造一个DFA M 使其能够接受标识符; • 2、构造一个DFA M 使其能够接受偶数。 • 3、构造一个DFA M 使其能够接受定点实数(注:定点实数必须符合 dd*(.dd*| ε) 的格式,如 3.14,3均为定点实数,而“3.”,“.14”,“3.1.4”, “3ab”均不属于定点实数); 数学与信息工程学院 计算机系

  32. 4.3.3 不确定的有穷自动机(NFA) • 一个不确定的有穷自动机M是一个五元组:M=(K,Σ,f,S,Z)其中: • K是一个有穷集,它的每个元素称为一个状态; • Σ是一个有穷字母表,它的每个元素称为一个输入符号; • f 为K * 到K的子集的映像; • S  K是非空初态集; • Z K是一个终态集。 数学与信息工程学院 计算机系

  33. 例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} • 试画出其状态图。 数学与信息工程学院 计算机系

  34. 4.3.4 NFA识别正规文法的途径 • 对于∑*中的任何符号串t,若存在一条从某一初态结点到某一终态结点的道路,且这条路上所有弧标记符连接成的符号串等于t,则称t可为NFA M所接受。若M的某些结点既是初态结点同时又是终态结点,则空字可被M所接受。 • DFA是NFA的特例,对于每个NFA M,存在一个DFA M’,使得L(M) = L(M’)。 数学与信息工程学院 计算机系

  35. 练习:例4.7中的NFA M能识别下列哪些字符串? • 1、abaa • 2、baabab 数学与信息工程学院 计算机系

  36. 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 数学与信息工程学院 计算机系

  37. 子集法 • 首先介绍几个相关的运算: • ⑴、状态集合I的ε-闭包,表示为ε-closure(I),定义为一状态集,是状态集I中的任何状态S经任意条ε弧而能到达的状态集合。 • ⑵、状态集合I的a弧转换,表示为move(I,a)定义为状态集合J,其中J是所有那些可以从I中的某一状态经过一条a弧而到达的状态的全体。 数学与信息工程学院 计算机系

  38. 利用子集法构造一个接受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 } ; 数学与信息工程学院 计算机系

  39. ∑={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 数学与信息工程学院 计算机系

  40. 练习:将以下的 NFA 转换为 DFA a a, b 1 0 a 数学与信息工程学院 计算机系

  41. 作业 将以下的 NFA 转换为 DFA V 0 0 0 0,1 0,1 Q 1 S Z 1 1 1 U 数学与信息工程学院 计算机系

  42. 例4.4带ε的有限自动机的转换 ε 2 3 a ε b ε ε ε a b 10 0 1 6 7 8 9 ε ε b 4 5 ε 数学与信息工程学院 计算机系

  43. 转换后的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 数学与信息工程学院 计算机系

  44. b 2 b b a a a b b 0 1 3 4 a a DFA M 的状态图 数学与信息工程学院 计算机系

  45. 4.3.6 确定有穷自动机的化简 • 没有多余状态及等价状态的,称之为最小有穷自动机。 • 多余状态: • ⑴、从该自动机的开始状态出发,任何输入串也不能到达的那个状态; • ⑵、从这个状态出发,没有通路到达终态。 数学与信息工程学院 计算机系

  46. 判断下列哪些状态为多余状态 a 4 b 2 a b 1 5 b 3 数学与信息工程学院 计算机系

  47. 两个状态s和t的等价条件 • ⑴、一致性:s 和 t 必须同时为可接受状态或不可接受状态; • ⑵、蔓延性:对于所有输入符号, s 和 t 必须转换到等价的状态里。 数学与信息工程学院 计算机系

  48. b 2 b b a a a b b 0 1 3 4 a a • 等价状态的判断举例 • 一致性:0和4的状态是否等价; • 蔓延性:2和3的状态是否等价。 数学与信息工程学院 计算机系

  49. 例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 数学与信息工程学院 计算机系

  50. 化简后的DFA M’ a a 6 4 b a a b 1 a b 5 3 b b 数学与信息工程学院 计算机系

More Related