1 / 27

习题解答

习题解答. 主要内容. 概论 词法分析 CFG 文法 语法分析. 概论. 编译器的概念、作用 编译器的组成 总体结构图、前端、后端 翻译的步骤 编译器中的主要数据结构 自举和移植. 词法分析. 词法分析的作用 正则表达式 自动机( NFA 和 DFA ) 正则表达式和自动机的转换. CFG 文法. 文法的作用及概念 文法的分类 乔姆斯基的文法分类及 CFG 文法的局限。 文法的二义性 如何判断文法的二义性、如何解决文法的二义性 表示文法: EBNF 、语法图 使用文法:分析树和抽象语法树. 语法分析. 自上而下语法分析

yaholo
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. 主要内容 • 概论 • 词法分析 • CFG文法 • 语法分析

  3. 概论 • 编译器的概念、作用 • 编译器的组成 • 总体结构图、前端、后端 • 翻译的步骤 • 编译器中的主要数据结构 • 自举和移植

  4. 词法分析 • 词法分析的作用 • 正则表达式 • 自动机(NFA和DFA) • 正则表达式和自动机的转换

  5. CFG文法 • 文法的作用及概念 • 文法的分类 • 乔姆斯基的文法分类及CFG文法的局限。 • 文法的二义性 • 如何判断文法的二义性、如何解决文法的二义性 • 表示文法:EBNF、语法图 • 使用文法:分析树和抽象语法树

  6. 语法分析 • 自上而下语法分析 • 基本概念:推导、左句型 • 递归下降法和预测分析表法 • LL(1)文法的定义和构造,以及使用分析表对输入串进行分析 • 自下而上语法分析 • 基本概念:归约、右句型、句柄、活前缀 • LR文法的判定、对输入串的分析 • 几种LR分析法的比较 • 两种语法分析的比较

  7. 1、偶数:[1-9][0-9]*[02468]|[02468] 2、每个2均在9之前的数字串:(~9)*(~2)* 3、{0, 1}上含有子串010的所有串:.*010.* 4、所有相邻数字都不相同的非空数字串: no_0-8  9 no_0-7  (8|no_0-8 8) ( no_0-8 8)*(no_0-8|)|no_0-8 no_0-6  (7|no_0-7 7) (no_0-8 8)*(no_0-7|)|no_0-7 no_0-5  (6|no_0-6 6) (no_0-6 6)*(no_0-6|)|no_0-6 no_0-4  (5|no_0-5 5) (no_0-5 5)*(no_0-5|)|no_0-5 no_0-3  (4|no_0-4 4) (no_0-4 4)*(no_0-4|)|no_0-4 no_0-2  (3|no_0-3 3) (no_0-3 3)*(no_0-3|)|no_0-3 no_0-1  (2|no_0-2 2) (no_0-2 2)*(no_0-2|)|no_0-2 no_0  (1|no_0-1 1) (no_0-1 1)*(no_0-1|)|no_0-1 result  (0|no_0 0) (no_0 0)*(no_0|)|no_0 一、正规表达式

  8. 1、将下面的DFA最小化 二、正规表达式和自动机的转换

  9.      B A C B D B E C F D G E E F G G F 2、构造和正规式(a*|b*)b(ba)*等价的状态最少的DFA

  10. B A C B D B E C F D G E E F G G F

  11. 化简

  12. 1、文法S aSbS|bSaS| 产生的语言是什么?该文法是否是二义性文法 [解答] 该文法产生的语言是a的个数和b的个数相等的串的集合。 该文法是二义的,对于句子abab有两个不同的最左推导: S aSbS abS abaSbS ababS abab S aSbS abSaSbS abaSbS ababS abab 三、语法分析

  13. 2、写出下面语言的相应文法: (1) L1={anbnci|n1, i 0} (2) L2={anbnambm|n,m0} (3) L2={1n0m1m0n|n,m0} (4) L4={a2m+1bm+1|n,m0} 三、语法分析 [解答] (1) SAB AaAb|ab B cB|  (2) SAB AaAb|  B aBb|  (3) S1S0| A A0A1|  (4) SaaSb| ab

  14. 3、证明文法:S AaAb|BbBa A   B   是LL(1)文法,但不是SLR(1)文法 三、语法分析 [解答] FIRST(AaAb)={a} FIRST(BbBa)={b} 它们交集为空,所以为LL(1)文法。 根据该文法,不管对于什么句子,在面临栈顶符号进行空归约,由于FOLLOW(A)=FOLLOW(B)={a,b},因此在使用空归约时,是将归约成A还是归约成B存在冲突,即归约-归约冲突,所以该文法不是SLR(1)文法。 教材P160,SLR(1)文法的两个条件

  15. 4、(ex4.10)文法:declaration  type var-list type  int | float var-list  identifier, var-list|identifier 构造LL(1)分析表,分析输入串int x, y, z 三、语法分析 [解答] (1) 提取左因子,得到: declaration  type var-list type  int | float var-list  identifier var-list’ var-list’  , var-list| 

  16. 4、 [解答] (2) 求FIRST和FELLOW集合: declaration  type var-list type  int | float var-list  identifier var-list’ var-list’  , var-list|  FIRST(type var-list) = {int, float} FIRST(int) = {int} FIRST(float) = {float} FIRST(identifier var-list’) = {identifier} FIRST(, var-list) = {,} FIRST() = {} FELLOW(declaration) = {$} FELLOW(type) = {identifier} FELLOW(var-list) = {$} FELLOW(var-list’) = {$} 三、语法分析

  17. 4、 [解答] (2) 求FIRST和FELLOW集合: declaration  type var-list type  int | float var-list identifier var-list’ var-list’ , var-list|  int x,y 三、语法分析

  18. [解答] (3)构造LL(1)分析表 declaration  type var-list type  int | float var-list  identifier var-list’ var-list’  , var-list|  FIRST(type var-list) = {int, float} FIRST(int) = {int} FIRST(float) = {float} FIRST(identifier var-list’) = {identifier} FIRST(, var-list) = {,} FIRST() = {} FELLOW(declaration) = {$} FELLOW(type) = {identifier} FELLOW(var-list) = {$} FELLOW(var-list’) = {$}

  19. 栈 输入缓冲区 输出 栈 输入缓冲区 输出 $V’i y, z$ V iV’ $D int x, y, z$ $VT int x, y, z$ D TV $V’ , z$ 匹配y $Vint int x, y, z$ Tint $V, ,z $ V’,V $V x, y, z$ 匹配int $V z$ 匹配, $V’i x, y, z$ V iV’ $V’i z$ ViV’ $V’ , y, z$ 匹配x $V,,y, z$ V, V $V’ $ 匹配z $V y, z$ 匹配, $ $ 接受

  20. 5、 (ex5.1,5.2) 文法:E  (L)|a L  L, E | E [解答] (1) 扩展文法,得到: E’  E E  (L)|a L  L, E | E 项目分别为: E’  .E E  a. E’  E. L .L,E E  .(L) L L.,E E  (.L) L L,.E E  (L.) L L,E. E  (L). L .E E  .a L E. 三、语法分析

  21. 5、文法:E  (L)|a L  L, E | E [解答] (1) LR(0)的DFA 1: E’ E. 0: E’ .E E  .(L) E  .a E 6: L  (L). 5: L E. E ( ) 2: E  (.L) L  .L,E L .E E  .(L) E  .a 8: L  L,E. a 4: E  (L.) L  L.,E L E , 3: E  a. a 7: L  L,.E E .(L) E .a ( ( a

  22. [解答] (2) SLR(1)分析表 1: E’ E. 0: E’ .E E  .(L) E  .a E 6: E  (L). 5: L E. E ( ) 2: E  (.L) L  .L,E L .E E  .(L) E  .a 8: L  L,E. a 4: E  (L.) L  L.,E E L , 7: L  L,.E E .(L) E .a a 3: E  a. ( ( a 文法: E’  E E  (L)|a L  L, E | E FOLLOW(E’)={$} FOLLOW(E)={), , , $} FOLLOW(L)={), ,}

  23. 文法G: (0) E’  E (1) E (L) (2) Ea (3) L  L, E (4) L  E FOLLOW(E’)={$} FOLLOW(E)={), , , $} FOLLOW(L)={), ,} 分析串:((a),a,(a,a)) 和(a(a))

  24. E’  E E  (L)|a L  L, E | E [解答] (3) LR(1)项目的DFA 9: [E  (L)., $] 1: [E’ E., $] 0: [E’ .E, $] [E  .(L), $] [E  .a, $] E ) 6: [E  (L.), $] [L  L.,E, )/,] L ( 2: [E  (.L), $] [L  .L,E, )/,] [L .E, )/,] [E  .(L), )/, ] [E  .a, )/,] 12: [L  L,E., )/,] a , E E 11: [L  L,.E, )/,] [E .(L), )/,] [E .a, )/,] 3: [E  a., $] 7: [L E. , )/,] E a ( ( 4: [E  a., )/,] 5: [E  (.L), )/,] [L  .L,E, )/,] [L .E, )/,] [E  .(L), )/, ] [E  .a, )/,] a , a ( 8: [E  (L.), )/,] [L  L.,E, )/,] ) L 10: [E  (L)., )/,]

  25. 文法G: (0) E’  E (1) E (L) (2) Ea (3) L  L, E (4) L  E

  26. [解答] (4) LALR(1)项目的DFA 1: [E’ E., $] 0: [E’ .E, $] [E  .(L), $] [E  .a, $] E 6: [E (L)., $/)/,] 5: [L E., )/,] E ( ) 2: [E (.L),$/)/,] [L .L,E, )/,] [L .E, )/,] [E .(L), )/,] [E  .a, )/,] 8: [L L,E., )/, a 4: [E (L.), $/)/,] [L L.,E, )/,] L E , a 7: [E L,.E, )/,] [E .(L), )/,] [E .a, )/,] 3: [E  a., $/)/,] ( ( a FOLLOW(E’)={$} FOLLOW(E)={), , , $} FOLLOW(L)={), ,} 拥有和SLR(1)相同的状态数

  27. 文法G: (0) E’  E (1) E (L) (2) Ea (3) L  L, E (4) L  E FOLLOW(E’)={$} FOLLOW(E)={), , , $} FOLLOW(L)={), ,} 和SLR(1)分析表相同

More Related