20220628编译原理读书笔记

个人博客
https://blog.hylstudio.cn/archives/995

20220628编译原理读书笔记

2.5 上下文无关文法及其语法树

给定文法G=(Vn,Vt,P,S)
语法树又称推导树,定义:
1.每个节点都有一个标记属于V
2.根节点是S
3.若一个节点n至少有一个它自己除外的子孙A,则A肯定属于Vn
4.若节点n的直接子孙从左到右为n1,n2,…n,则n=>n1,n2,…n是P中的产生式

推导过程不唯一
若每一步都是对左部最左的Vn替换则称为最左推导,反之是最右推导
形式语言中最右推导被叫做规范推导,所得句型叫规范句型或最右句型

若一个文法存在多个语法树,则称这个文法是二义的
判定给定的上下文无关文法是否是二义的,或它是否产生一个先天二义的语言,这两个问题递归不可解

2.6 句型分析

自顶向下、自底向上

3 词法分析

虽然词法和语法可以同时放到文法描述里,但一半实现时候都是独立做词法分析

常见分类
标识符、字母数字、整数、运算符、等号、界符

正则表达式可以方便的描述词法规则,且正则表达式和正规文法都能定义语言,且有时候表达更加方便


A->xB,B->y => A = xy
A->xA|y => A = x*y
A->x, A->y => A = x|y

3.4 有穷自动机

确定的有穷自动机DFA,不确定的有穷自动机NFA
M=(K,M,f,S,Z)
K:有穷状态集
M:有穷字母表
f:转换函数,是K和M的笛卡尔积到K上的映像,用来定义状态转换条件
S:唯一的初态
Z:终态集合,是K的真子集

这里歪个楼,画状态转换图一定要有这几个元素,工作这么久很少见有人完全画对。初始要有一个箭头指向S,Z上的元素要有双层圈标记,每个线段代表转换规则,线上要有M元素的标记

NFA区别就是转换函数在特定状态上可以不唯一
NFA有算法可以转DFA,核心思想是构造确定性的子集

DFA化简,计算入度为0的状态可删除、计算等价状态合并多余的状态

3.5 正则表达式和有穷自动机的等价性

结论是等价,证明略,因此用正则表达式可以直接描述状态机,状态机的实现可由特定算法自动生成结构完整

3.6 正规文法和有穷自动机的等价性

结论是等价的,证明略,经过前面的铺垫,为自动化打下了良好的理论基础

3.7 词法分析器的自动构造工具

这可能是正常途径下接触到的第一个元编程吧。。。。
由前面的铺垫可知,既然等价,那就可以直接用程序生成程序,人工提供规则即可

这里歪个楼介绍下正则表达式基础,其实如果你手写练习过一些正规文法的生成式,就知道正则表达式多简洁了。因为这个概念是数学集合论的,因此正则表达式的写法也和集合闭包几乎一样,掌握基础并不困难

r* 匹配r的星闭包,r出现0次到多次
r+ 匹配r的正闭包,r出现1次到多次
r? 匹配r的任选,r出现0次或1次
r{n} 匹配r的n次幂,r出现n次
r{m,n} 匹配r的m到n次幂,r出现m次到n次闭区间
r{m,} 匹配r的m次幂以上,r出现m次以上闭区间
rs 匹配r和s的连接
r|s 匹配r和s的并集
其余写法均为简写,常见的就这几个

借助lex描述文件可以目标结构的c语言代码,完成词法分析器的自动生成
类似的工具不唯一,可以看看antlr

第4章到第6章都是语法分析的各种方法,有点懒得看了,总之结果是个语法树
我关心的是第7章语法制导的语义计算
也许是明天继续?
mark当前68页

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值