1 / 23

1-1 参照文法, E → E + E | E * E | ( E ) | I 写出以下表达式的生成过程 ( 最左派生、最右派生 ) : i * ( i + i ) * i

习题. 1-1 参照文法, E → E + E | E * E | ( E ) | I 写出以下表达式的生成过程 ( 最左派生、最右派生 ) : i * ( i + i ) * i. 1-2 扩充 文法 < 电话号码 > → < 局代码 >< 本机代码 > < 电话号码 > → < 地区前缀 >< 局代码 >< 本机代码 > < 地区前缀 > → < 地区代码 > - < 地区前缀 > →(< 地区代码 >) < 地区代码 > → DIGIT DIGIT < 地区代码 > → DIGIT DIGIT DIGIT

moira
Télécharger la présentation

1-1 参照文法, E → E + E | E * E | ( E ) | I 写出以下表达式的生成过程 ( 最左派生、最右派生 ) : i * ( i + i ) * i

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. 习题 • 1-1 参照文法, E → E + E | E * E | ( E ) | I 写出以下表达式的生成过程(最左派生、最右派生): • i * ( i + i ) * i

  2. 1-2 扩充文法 • <电话号码> → <局代码><本机代码> • <电话号码> → <地区前缀><局代码><本机代码> • <地区前缀> → <地区代码> - • <地区前缀> →(<地区代码>) • <地区代码> → DIGIT DIGIT • <地区代码> → DIGIT DIGIT DIGIT • <局代码> → DIGIT DIGIT DIGIT DIGIT • <本机代码> → DIGIT DIGIT DIGIT DIGIT • 增加包括国际代码的电话号码描述 • 如:86-010-6739-1742

  3. 1-3 给定文法如下: • E → T | E + T | E - T • T → F | T * F | T / F • F → ( F ) | i • 画出表达式 i*(i+i)+i 的分析树 • 1-4 判断上题的文法属于哪个类型的文法?为什么?

  4. 例2-1(1/2) DOS 命令 date 的输出格式 例:9-2-1993、09-03-1993、9-03-93 语法 date → month - day - year 词法 month → DIGIT DIGIT | DIGIT day → DIGIT DIGIT | DIGIT year → DIGIT DIGIT | DIGII DIGIT DIGIT DIGIT

  5. 例2-1(2/2) 语义 year(年)、month(月)、day(日) 语义约束条件 0 < month.value < 13 0 < day.value < 32,31,30 0 < year.value < 10000

  6. 习题 • 2-1 试分析一个简短的 C 程序,找出几个属于语法、词法、语义的语言现象。 • 2-2 试分析例 2-1 的 date 输出数据的处理中,应该做哪些词法分析、语法分析、语义处理。 • 2-3 理解交叉编译和自展技术

  7. 习题 • P97 练习3.1~3.2;3.3,3.4选做 • 练习3.5~3.13——有能力者可以完成 • 3-1 构造下列正规式的状态图 • a ( ( a | b )* | a b* a )* b • 3-2 给出下述文法所对应的正规式 • S → 0 A | 1 B • A → 1 S | 1 (01|10)* • B → 0 S | 0

  8. 3-3 文法G[<单词>]为: <单词> → <标识符> | <整数> <标识符> → <标识符> <字母> | <标识符> <数字> | <字母> <整数> → <整数> <数字> | <数字> <字母> → A | B | … | Y | Z <数字> → 1 | 2 | … | 8 | 9 | 0 将该文法改写为正规文法 • 3-4 上机题 • 合并例3-3和例3-4的状态图,设计并实现一个词法分析函数,每次返回一个单词种别和属性;编制主程序完成测试(输入和输出)。

  9. 1~3章自测题 1、设 r=(1|0)*0((0|1|2)2|(0|1|2) 3)(0|1|2|3|4|5|6|7|8|9)8 求RG G 和FA M使得L(M)=L(G)=L(r) 2、构造算术表达式的文法G,并且 1) 指出各语法变量的意义 2) 求 x+log( |sin(y)| +b4) 最左推导、最右推导 3) 求 x+log( |sin(y)| +b4) 的语法树 3、叙述下列概念的定义和意义 前缀、文法、直接推导、规范归约、短语、句柄、正规式、正规定义式、种别码与属性值、双缓冲 4、编译程序的总体结构及各模块的功能;编译程序的实现方法;如何根据FA实现扫描器?

  10. 习题: 4-1 改写以下文法,消除左递归 • M → M a H | H • H → b ( M ) | ( M ) | b 4-2 求以下文法中各非终结符的FIRST集和FOLLOW集 • A → b a B |  • B → A b b | a 4-3 构造如下给定文法的递归子程序 • S → a|↑|( T ) • T → T,S|S

  11. 上机题 4-4 给定下列文法: • S→id=E; • S→if C then S • S→while C do S • C→E>E • C→E<=E 用递归子程序法设计并实现语法分析程序,按照生成顺序输出产生式 练习: P202~204 4.1~4.8

  12. 4-5 构造如下给定文法的预测分析表 • S → A B • A → B a| • B → D b|D • D → d| 4-6 判断下述文法可否改写为 LL(1)文法 • a. S→A|B • A→aA|a • B→bB|b • b. S→i|(E) • E→E+S|E-S|S

  13. 思考题 • 4-7 能否直接用语法图描述 E→E+E|E-E|E*E |E/E|-E|(E)|id|const,并用递归子程序法实现语法分析?为什么? • 4-8 能否将各种单词的文法直接并入表达式语法,进行语法分析处理?试分析这样做会有哪些好的影响和不好的影响。 • 练习 P204:4.9~4.13

  14. 4-9 给出布尔表达式的文法,构造其算符优先关系表 • bexpr → bexpr OR bexpr • bexpr → bexpr AND bexpr • bexpr → NOT bexpr • bexpr →( bexpr ) • bexpr → TRUE • bexpr → FALSE • 练习:P205 4.15~4.17

  15. 4-10求给定文法的拓广文法的LR(0)项目集规范族,及相应的LR(0)分析表:4-10求给定文法的拓广文法的LR(0)项目集规范族,及相应的LR(0)分析表: • S  A • A  B A |  • B  a B | b • 4-11 说明为什么各种 LR 分析方法的分析能力不同?

  16. 4-12 已知文法 A  a A d | a A b |  ,判断该文法是否是 SLR(1) 文法,如果是 SLR(1)文法,则构造分析表;并对输入串ab# 给出分析过程。 • 4-13 证明下列文法不是 LR(0) 文法, 是 SLR(1) 文法。 • S  A • A  A b | b B a • B  a A c | a | a A b • 练习:P206~P207 4.18~4.25

  17. 思考题:如何在计算机中存储一个文法的所有LR(0)项目最能节省空间?如果某文法有n个产生式,这些产生式的右部的最大长度为m,问:你所给出的存储方案需要的存储空间与n和m有什么样的关系?假设:一个字符占一个字节,一个整数占两个字节。思考题:如何在计算机中存储一个文法的所有LR(0)项目最能节省空间?如果某文法有n个产生式,这些产生式的右部的最大长度为m,问:你所给出的存储方案需要的存储空间与n和m有什么样的关系?假设:一个字符占一个字节,一个整数占两个字节。

  18. 习题 5-1 下列文法是一个二进制数的文法。试根据该文法,编写一个语法制导定义,描述由S 生成的二进制数的数值计算。(提示:val、n) S → L . L L → L B | B B → 0 | 1 5-2 参照下列表达式文法编写语法制导定义,描述表达式的类型计算。要求在不同精度的数的计算中,结果取精度高的类型。(提示:type、tran、n、类型判定与转换) E → E + T | T T → n.n | n

  19. 5-3.把下列语句翻译成三地址代码 while a > 10 if b = 100 then while a < 20 do a := a + b - 1

  20. 上机题(选做):在第四章上机题的基础上,补充以下的语义处理功能,形成一个将源程序翻译成三地址代码序列的翻译程序:上机题(选做):在第四章上机题的基础上,补充以下的语义处理功能,形成一个将源程序翻译成三地址代码序列的翻译程序: • 将表达式、赋值语句翻译成三地址代码 • 将 If 条件语句、While 循环语句翻译成三地址代码

  21. 思考题:试分析以下 C 程序的运行结果 float x, y; char buf[32]; main( ) { int i; char *p = &x + 20; for( i = 0; i < 32; i++ ) buf[ i ] = ‘a’ + i; while( *++p != ‘x’ ) putchar( *p ); }

  22. 思考题6-1 程序的执行过程中如何进行存储分配?何时为哪些数据目标分配存储空间? • 思考题6-2 什么叫静态绑定?什么叫动态绑定?变量的绑定和过程的绑定有什么区别?

  23. 思考题7-1 P374 7.1 • 思考题7-2 设m维数组A[n1,n2,…,nm]是按照列优先存放的,其各维的下界是0,首地址为a,请给出A [i1,i2,…,im]的地址的计算公式,并给出相应的语法制导定义。 • 思考题7-3 试分别给出下列语句的三地址码,并希望你能讲清楚是如何转换出来的。 • call sub(a+5,b*a,c) • fun(a+5,b*a,c)

More Related