编译原理知识总结

编译原理知识总结

1、基本概念

1.1 编译器与解释器

  • 翻译器 包含编译器和解释器,是一个更大的概念,跟平常英文翻译成中文一样,这里的翻译是将高级程序语言翻译成机器能识别的机器码(汇编指令)

  • 编译器 想到C语言,程序要执行,就要先编译成机器码,然后才能执行

  • 解释器 python为代表,程序一边翻译成机器码,一边执行

1.2 编译器前端

  • 词法分析器 涉及到 正则、DFA(确定的有限自动机)、NFA(不确定的有限自动机)
  • 语法分析器 涉及到 上下文无关文法、 LL(1)文法、LR文法
  • 语义分析器 涉及到综合属性、继承属性、带注释的语法分析树

ps:这里目前只能想到这么多,有些学的已经忘了,等复习的过程中补充

1.3 遍的概念

  • 编译器将文件从头到尾读一遍称作一遍,可以理解这是一个衡量编译器效率的指标

  • 一个阶段可以对文件进行多遍操作,一遍操作也可以有多个阶段(这里的阶段可以指词法分析阶段,语法分析阶段)

整个编译过程流程图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zMvEKFob-1651938695629)(images/编译原理复习文档/image-20220507230259243.png)]

1.4 习题

  • 树的三种遍历方法

    对每一棵树进行相同的遍历方法,由于树的定义是递归的,也就是需要看完一棵树左子树或者右子树才往下看

    • 前序遍历 顺序: 树根 => 左子树() => 右子树()
    • 中序遍历 顺序: 左子树() => 树根 => 右子树()
    • 后序遍历 顺序: 左子树() => 右子树() => 树根
  • 题目:下图生成中间代码使用的树的遍历方式是什么?

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Yj1htEWL-1651938695631)(images/编译原理复习文档/image-20220507233917568.png)]

  • 答案:后序遍历

2、词法分析器

2.1 正规式

2.1.1 基本概念

字母表:符号的有限集合, 例:Σ={0,1}

:符号的有穷序列,例:0110, ε (空串)

语言:字母表上的一个串集{ε, 0, 00}

2.1.2 串的运算
  • 连接 xy

  • 积(指数) s0 为 ε,si = si-1 s

2.1.3 语言的运算
  • 和:L∪M = {s | s 属于L 或 s 属于 M }
  • 连接:LM = {st | s 属于L 且 t 属于 M}
  • 指数:L0是{ε},Li是Li -1L (i > 0)
  • 闭包:L* = L0 ∪ L1 ∪ L2 ∪…
  • 正闭包: L+ = L1 ∪ L2 ∪…
2.1.4 习题

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rHRGuwBD-1652200998422)(images/编译原理复习文档/image-20220508204956615.png)]

2.2 DFA 与 NFA

  • 五元组(状态集合、输入集合、初始状态,转移函数、接受状态)=> (S, s0, Σ, move, F)

  • DFA识别过程:初始状态 接受 输入集合中的字符,然后转移到下一个状态, 最终到达 接受状态中 一个状态

2.2.1 构建确定性有限自动机
  • DFA的识别过程就是构建确定性有限自动机的过程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0i5NINUY-1652200998426)(images/编译原理复习文档/image-20220508205305259.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a0hdyNVR-1652200998428)(images/编译原理复习文档/image-20220511001020378.png)]

2.2.2 不确定性有限自动机转化成确定性有限自动机

方法:子集构造法

操作:将NFA中相等的状态 合并为一个状态集合,这个状态集合就是DFA中的一个状态。那么什么是相等的状态?对于开始状态,不输入任何的符号或者说是输入空能到达的状态是相等的状态;然后从开始状态集合出发,集合中的每个状态对于输入符号,都能到达一些状态,这些状态是相等的状态,将能到达的状态放在一个集合,构成DFA中的一个状态

一道例题

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Vkc8E94c-1652200998432)(images/编译原理复习文档/image-20220511002252278.png)]

2.2.3 确定性有限自动机的化简
  • 从最开始的终止态集合非终止态集合出发,如果对于输入,产生了不在一个集合的状态,就需要将状态进行划分,重复上面的过程,直到不产生新的划分

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gNXorZr8-1652200998434)(images/编译原理复习文档/image-20220511001413511.png)]

2.2.4 正规式到确定性有限自动机

一些从正规式到NFA的规则

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-736BwZbQ-1652200998438)(images/编译原理复习文档/image-20220508225752974.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N4SYNvp5-1652200998441)(images/编译原理复习文档/image-20220508225821524.png)]
在这里插入图片描述
在这里插入图片描述

构建过程

  • 模块化的思想,将一个长的正规式,划分成几个模块,模块可以是上面几种基本形式,然后将模块连接起来,完成了从正规式到NFA的构建

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YLAMyLSm-1652200998449)(images/编译原理复习文档/image-20220511002144140.png)]

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值