编译原理知识点汇总2

  • 第二章文法和语言

这一章只有两种大题,第一种先推导,再画语法树,找到短语,简单短语,句柄,判断句子,句型。

第二种是语言(考的概率挺小的)大题最后讲

前面都是小题的知识点

小题

1.字母表和符号串

字符表:元素的非空集合,表中每个元素称为符号3f89355c8d384be78701b575c12e9519.png 

1,2是字母表,3中有相同的符号,4中为空。3,4不是。

符号串:由字母表上0个或者多个符号所组成的任何有穷序列。

fc4546b5732d45afbc45cd5736b8570c.png

 符号串及其集合的运算

符号串的长度:所含符号的长度

981f6320207f41338b7d2691bf4badf8.png

 符号串相等:比较x,y两符号串,当且仅当组成x的各符号与组成y的各符号依次相等。

例:x=aabb y=aabb   x=y   

m=ab  n=ba      m!=n

符号串的前缀和后缀

例:z=abc

前缀:a ab abc 空

后缀:c bc abc 空

9d080eafd91d42b3b242a66fcec76c8d.png

符号串的子串

例:abc bc ab a b c 空

符号串的连接:xy称为符号串x与y连接

|x+y|=|x|+|y|   (长度)

091c8072892343a99b2739e519ecac66.png03beb05fe6364a638163d16c255d87b4.png

集合A与B的乘积

dc963be126a34f0b9443f699e32a9800.png

符号串的幂运算

ff45d86954694aa3b08a88b4f58ea1c4.png

集合的幂运算

a53c3026f1454ac59f46077862d28c3c.png

字符串集合的正闭包

55087ae052e84857bc7df61bfc71fb5f.png

1200d3b100284e358be5f0e42ad7565a.png

字符串的闭包(星闭包) 

5ef4cdbe64ad4a219266461db79d3d2a.png94698f8e01bd4c3198d3e3db852041e8.png

正闭包和星闭包的区别在于星闭包有空 

f78647501a0b411e8248af0986d639d3.png


2.文法

242e10a88fea4249b04859f695d56651.png

7bf43ee7061346d28abb5322b6dc77b4.png

文法的分类

0型文法(短语结构文法):即左边不能为空,右边可以为空,基本无限制

1型文法(上下文有关文法):aUb → aub    a b可为空 左部符号不超过右部符号且右部符号不为空f02891ced6df4668a5a7e2cbdb8e45f6.png

2型文法(上下文无关文法):a →b    a为非终结符号 b为非终结符号与终结符号的星闭包

可以描述程序设计语言的语法规则 

 b34636d5d1bc4cbf8c532fc83d44de70.png

3型文法(正规文法):A →aB 或 A → a(右线性文法)

通常用来描述单词结构,其中包含标识符,常量,保留字,运算符,界符。2909bc5a38084a35978ff80453fdfa85.png

文法的EBNF表示

I表示或

{}表示重复

[]表示可有可无

()表示优先级

798a260b9da04fc790493091716d964b.png


3.递归规则与递归文法

递归规则:在规则右部含有规则左部相同符号的规则

例如:U->Uy

递归文法:对于文法中的任一非终结符号,若能建立一推导过程,推导所得到的符号串又出现了非终结符号,则文法是递归的。

例如:Z->aBa

B->bB|b


4.文法的二义性

一个文法存在两颗不同的语法树,则该句子或句型是二义性的,对应的文法也是二义性的。

二义性意味着句柄不唯一例如句型E+E*i

文法的二义性是不可判定的

解决办法:提出限制条件,称为无二义性的充分条件。当满足这些条件时,就判定文法是无二义性的


5.有关文法的实用限制

文法不能是二义性的

删去有害规则和多余规则

有害规则:形如U->U的产生式,会引发文法的二义性,若有,则删去

多余规则:文法中不会用到的规则

1.不可到达:文法中的某些非终结符号不在任何规则的右部出现

2.不可终止:某些非终结符号,由它不能推出终结符号串


大题

1. 推导(小题)

直接推导就是推一步e7a19b06fa9b44cba10661b399125f4d.pnge54f21dad0834ae3ad426e1380cda326.png  243bdf07d19e4b7bb2b7a783bef8842d.png

2、推导(大题)
7b93f099b282419fbb81080719bbf22a.png

每次只变换最右边的非终结符号f1f8296a42474382a8db5c3daf4e644d.png

综合大题0dc43c8e93524ec8b6ed8b383f3105ed.png

短语是所有子树叶子节点的集合

简单短语是深度为1的子树叶子节点的集合

句柄是最左侧的简单短语

句型包含非终结符号和终结符号

句子只包含终结符号91ac260d24a24330b1a0d2fce2a4ba39.png


语言 

  • 17
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
由于c语言的知识点非常多,我们无法在这里列举全部,所以我们将汇总一些常见的知识点。 1. 基本语法:变量、常量、数据类型、运算符、控制语句等。 2. 函数:函数定义、函数调用、递归、函数指针等。 3. 数组:定义、初始化、访问、多维数组等。 4. 指针:指针变量、指针运算、指针数组、指向函数的指针等。 5. 内存管理:动态内存分配、内存泄漏、内存对齐等。 6. 字符串处理:字符串的定义、字符串的输入输出、字符串的比较、字符串的拼接等。 7. 文件操作:文件的打开、读取、写入、关闭等。 8. 结构体:结构体的定义、结构体变量的声明、结构体指针等。 9. 预处理器:宏定义、条件编译、文件包含等。 10. 标准库函数:常用函数库、数学函数库、字符串函数库、时间函数库等。 11. 多线程编程:线程的创建、线程的同步、线程的销毁等。 12. 网络编程:TCP/IP协议、套接字编程、HTTP协议等。 13. 数据结构:链表、栈、队列、树、图等。 14. 算法:排序算法、查找算法、递归算法、动态规划等。 15. 编程范式:面向过程编程、面向对象编程、函数式编程等。 16. 编程实践:代码风格、注释、调试等。 17. 编译原理:语法分析、词法分析、代码生成等。 18. 操作系统:进程管理、线程管理、内存管理等。 19. 数据库:SQL语言、数据库设计、数据存储等。 20. Web开发:HTML、CSS、JavaScript、PHP等。 以上是c语言的一些常见知识点,但是c语言的应用非常广泛,还有很多其他的知识点需要掌握。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值