编译原理
编译原理
Mongo_girl
哈哈哈哈哈哈哈哈
展开
-
编译原理:句型、句子、短语、直接短语、句柄、素短语、最左素短语
--句型与句子如果 S⇒*α,α∈(VT∪VN)*,则称α是G的一个句型(sentential form) 一个句型中既可以包含终结符,又可以包含非终结符,也可能是空串 如果 S⇒*w,w∈VT*,则称w是G的一个句子(sentence) 句子是不包含非终结符的句型书本上的概念:如果S αAβ且Aγ,则称γ是句型αγβ的相对于非终结符A的短语 。如果SαAβ 且...原创 2020-04-24 18:25:30 · 3039 阅读 · 1 评论 -
文法分析方法过程(自动机、分析表、输入串)
1 LL(1)文法(特殊:自上而下)2 LR(0)文法3 SLR(1)文法4 LALR(1)文法LALR需要合并同心集,即合并产生式相同但是向前搜索符不同的项集族。5 LR(1)文法https://blog.csdn.net/zuzhiang/article/details/79047743?depth_1-utm_source=distr...原创 2020-04-22 15:40:48 · 455 阅读 · 0 评论 -
LL(1)、LR(0)、SLR(1)、LALR(1)、LR(1)文法的关系与判别
证明下列文法是LL(1)文法但不是SLR(1)文法S->AaAb|BbBa A->εB->ε (1)首先该文法无左递归存在,没有公共左因子. 其次:对于S→AaAb|BbBa FIRST(AaAb)={a} FIRST(BbBa)={b} FIRST(AaAb)∩FIRST(BbBa)=Φ 所以该文法是LL(1)文法. (2)证明该文法不是SLR的...原创 2020-04-21 17:22:11 · 6959 阅读 · 0 评论 -
移入-归约冲突、归约--归约冲突
移入--归约冲突:某一产生式的右部是另一产生式的前缀归约--归约冲突:不同产生式有相同的右部 或者 产生式的右部是另一产生式的后缀举例如下:...原创 2020-04-22 11:47:00 · 26715 阅读 · 6 评论 -
Firstvt、Lastvt的求解 & 构造算符优先表
一个文法是算符优先文法(operator grammar)OG应满足的条件:①没有形如A→···BC···的产生式(A,B,C∈VN)②没有形如A→ε的产生式③任意两个终结符号之间至多存在一种优先关系④没有相同的产生式右部...原创 2020-04-18 18:35:04 · 2934 阅读 · 1 评论 -
编译原理知识汇总
1.编译阶段编译前端主要包括词法分析、语法分析、语义分析、中间代码生成这几个部分,后端则包含代码优化和目标代码生成部分。前端的特点是仅与编译的源语言有回关,而后端则仅与编译的目标语言及运行环境有关。将编译过程划分成前端和后端,主要目的是在多种源语言和多答种目标语言的开发过程中,可以灵活搭配组合,消除重复开发的工作量,提高编译系统的开发效率。...原创 2020-04-14 11:25:37 · 560 阅读 · 0 评论 -
编译原理【文法】知识汇总
1、规范归约和规范推导是互逆的两个过程。( ×)规范归约:是最右推导的逆过程,它总是归约一个句型当前句柄。也叫做最左归约。推导的逆过程称为规约。规约就是选择一个文法规则:X→ABC,依次从栈顶弹出C、B、A,再将X压进栈。规范归约是文法中句子的一个最右推导的逆过程,而最左推导对应的是最右规约。2、...原创 2020-04-18 22:29:35 · 384 阅读 · 0 评论 -
编译原理【语法分析】知识汇总
1、在语法分析方法中,递归下降分析法属于 自上而下 自下而上语法分析的原理是 移入-归约法 (最左归约方式/最右推导)在自底向上的语法分析方法中,分析的关键是寻找句柄2、LR分析法从左到右扫描输入串,采用移进-归约的方式,当栈顶出现句柄时进行归约。3、LR语法分析栈中存放的状态是识别文法规范句型 活前缀的DFA状态。4、若状态k含有项目“A→α·,a”,对终结符a,...原创 2020-04-18 15:24:14 · 2490 阅读 · 2 评论 -
编译原理【词法分析】知识汇总
========================更新====================1、getsymPL/0编译程序的词法分析程序GETSYM是一个独立的过程,其功能是为语法语义分析提供单词,把输入的字符串形式的源程序分割成一个个单词符号传递给语法语义分析。其主要任务为:①滤空格;②识别基本字;③识别标识符;④拼数;⑤拼复合词;⑥输出源程序。语法分析子程序采用了自顶向下的递归子...原创 2020-04-18 15:23:24 · 397 阅读 · 0 评论 -
写出控制语句的三元式、四元式序列
原创 2020-04-17 15:13:05 · 2969 阅读 · 0 评论 -
从NFA构造等价DFA,对DFA的化简
对NFA的考量是困难的,对DFA的考量则是无比清晰的。对于一个NFA,总存在一个与其等价的DFA。这里"等价"指的是这两个有穷自动机的正规集是相同的。ε-closure(…)和more(…,…)在NFA中,ε-closure(A)指的是从状态A经若干ε弧能达到的状态,也包括A自己。more({A,B,C},a)指的是所有从{A,B,C}里的状态经过一次a弧所能到达的状态。从NFA构造等价...转载 2020-04-16 17:29:46 · 2560 阅读 · 0 评论 -
符号表的作用
在编译程序中符号表用来存放语言程序中出现的有关标识符的属性信息,这些信息集中反映了标识符的语义特征属性。在词法分析及语法在分析过程中不断积累和更新表中的信息,并在词法分析到代码生成的各阶段,按各自的需要从表中获取不同的属性信息。不论编译策略是否分趟,符号表的作用和地位是完全一致的1 符号表的作用① 收集符号属性编译程序扫描说明部分收集有关标识符的属性,并在符号表中建立符号的相应属性信...原创 2020-03-31 20:57:31 · 7836 阅读 · 0 评论 -
编译原理-9-代码生成
目录1 代码生成器的主要任务2 一个简单的目标机模型3 指令选择4 寄存器的选择5 寄存器选择函数getReg的设计6 窥孔优化1 代码生成器的主要任务(1)指令选择 选择适当的目标机指令来实现中间表示(IR)语句(2)寄存器分配和指派 把哪个值放在哪个寄存器中 (3)指令排序 按照什么顺序...原创 2020-02-29 21:57:23 · 273 阅读 · 0 评论 -
编译原理-8-代码优化
1 流图(1)基本块(Basic Block) 基本块是满足下列条件的最大的连续三地址指令序列 控制流只能从基本块的第一个指令进入该块。也就是说,没有跳转到基本块中间或末尾指令的转移指令 除了基本块的最后一个指令,控制流在离开基本块之前不会跳转或者停机(2)流图2 常用的代码优化方法机器无关优化 —针对中间代码 机器相关优化— 针对目标代码 ...原创 2020-02-28 17:20:19 · 701 阅读 · 0 评论 -
编译原理-7-运行存储分配
1 运行存储分配概述 编译器在工作过程中,必须为源程序中出现的一些数据对象分配运行时的存储空间 对于那些在编译时刻就可以确定大小的数据对象,可以在编译时刻就为它们分配存储空间,这样的分配策略称为静态存储分配 反之,如果不能在编译时完全确定数据对象的大小,就要采用动态存储分配的策略。即在编译时仅产生各种必要的信息,而在运行时刻,再动态地分配数据对象的存储空间 ...原创 2020-02-26 14:50:07 · 561 阅读 · 1 评论 -
编译原理-6-中间代码生成
1类型表达式局部变量的存储分配对于声明语句,语义分析的主要任务就是收集标识符的类型等属性信息,并为每一个名字分配一个相对地址 从类型表达式可以知道该类型在运行时刻所需的存储单元数量称为类型的宽度(width) 在编译时刻,可以使用类型的宽度为每一个名字分配一个相对地址 名字的类型和相对地址信息保存在相应的符号表记录中2声明语句的翻译3简...原创 2020-02-22 23:19:14 · 489 阅读 · 1 评论 -
编译原理-5-语法制导翻译
1 概述2语法制导定义SDD3 SDD的求值顺序4S-属性定义与L-属性定义5语法制导翻译方案SDT(1)语法制导翻译方案SDT(2)将S-SDD转换为SDT(3)S-属性定义的SDT 实现(4)扩展的LR语法分析栈(5)在自底向上语法分析栈中实现桌面计算器(6)将L-SDD转换为SDT(7)L-属性定义的SDT 实现6在非递归的预测分析过程...原创 2020-02-17 18:06:45 · 663 阅读 · 0 评论 -
编译原理-4(2)-语法分析
8 自底向上分析概述9 LR分析法概述(1)LR 分析法的基本原理(2)LR 分析器(自动机)的总体结构(3)LR 分析表的结构(4)LR 分析器的工作过程及LR 分析算法(5)如何构造给定文法的LR分析表10 LR(0)分析(1)LR(0) 项目(2)增广文法 (Augmented Grammar)(3)文法中的项目(4)LR(0)自动机11LR(0)分析表构造算法12 SLR分析13LR(1)分析(1)LR(1)分析法的提出(2)规范LR(1)项目(3)等价LR(1原创 2020-02-07 23:20:15 · 315 阅读 · 0 评论 -
编译原理-4(1)-语法分析
1 自顶向下分析概述(1)最左推导(Left-most Derivation) 与最右推导(Right-most Derivation)(2)自顶向下语法分析的通用形式(3)预测分析 (Predictive Parsing)2 文法转换(1)消除直接左递归(2)消除间接左递归(3)提取左公因子(Left Factoring ) 3 LL(1)文法(1)S_文法(2)非终结符的后继符号集 — FOLLOW(A)(3)产生式的可选集 —SELECT( A→β )(4)串首终结符集 — FIRST(α原创 2020-01-30 11:46:17 · 332 阅读 · 0 评论 -
编译原理-3-词法分析—正则表达式
目录1 正则表达式2 正则定义3 有穷自动机4 有穷自动机的分类(1)确定的有穷自动机 (Deterministic finite automata, DFA)(2)非确定的有穷自动机(Nondeterministic finite automata, NFA)5 从正则表达式到有穷自动机(1)根据RE 构造NFA(2)从NFA到DFA的转换6 识别单词的...原创 2020-01-22 21:55:48 · 909 阅读 · 0 评论 -
编译原理-2-程序设计语言及其文法
1 基本概念(1)字母表(2)串(String)2 文法的定义3 语言的定义(1)推导(Derivations)和规约(Reductions)(2)句型和句子(3)语言的形式化定义4 文法的分类(0)0型文法 (Type-0 Grammar)(1)1型文法 (Type-1 Grammar)(2)2型文法 (Type-2 Grammar)(3)3型文法 (Type-3 Grammar)(4)文法的判别5 CFG的分析树(1)分析树是推导的图形化表示(2)句型的短语原创 2020-01-16 22:04:34 · 748 阅读 · 0 评论 -
编译原理-1-绪论
目录1 什么是编译2 编译系统的结构3 词法分析概述4 语法分析概述5 语义分析概述6 中间代码生成7 编译器的结构1 什么是编译预处理器:把存储在不同文件中的源程序聚合在一起;把被称为宏的缩写语 句转换为原始语句。链接器 :将多个可重定位的机器 代码文件(包括库文件) 连接到一起 ;解决外部内存地址问题2 编译系统的结构 3 词法分...原创 2020-01-05 20:56:38 · 259 阅读 · 0 评论