编译原理
文章平均质量分 89
编译原理
槑!
这个作者很懒,什么都没留下…
展开
-
【编译原理系列】目标代码生成与优化
代码生成器的主要任务指令选择选择适当的__目标机指令__来实现__中间表示(IR)__语句例:三地址语句:x = y+z目标代码LD R0 , y:把的值加载到寄存器中AD R0 , R0 , z:z加到上 R0 上ST , x, R0:把 R0的值保存到中寄存器分配和指派把哪个值放在哪个寄存器中指令排序按照什么顺序来安排指令的执行一个简单的目标机模型三地址机器模型加载、保存、运算、跳转等操作内存按字节寻址n个通用寄存器 R0 , R1, … , Rn - 1原创 2021-01-25 00:11:08 · 2013 阅读 · 0 评论 -
【编译原理系列】布尔表达式及控制语句翻译
布尔表达式从高到低:not and or短路计算可以回避指针为空时对ptr^.data=x的判断,从而直接计算的语法制导翻译(1)E→E1 or E2 { E.place := newtemp; emit(E.place ':=' E1.place 'or' E2.place);}(2) |E1 and E2 { E.place := newtemp; emit(E.place ':=' E1.place 'and' E2.place);}(3) |not E1原创 2021-01-25 00:10:50 · 4520 阅读 · 1 评论 -
【编译原理系列】算术表达式与数组元素翻译
简单算术表达式与赋值句简单算术表达式和赋值句,是指表达式和赋值句中变量是不可再分的简单变量语法制导翻译属性.place:存放E的变量地址(符号表中地址或临时变量的编码)过程emit(result ‘:=’ arg1 ‘op’ arg2):生成“result:= arg1 op arg2”的三地址码产生式: 语义规则:(1) A→id:=E {emit(entry(id.name) ':=' E.place)} (2) E→E1+E2 {E.place:=newtemp; e原创 2021-01-24 14:48:13 · 1513 阅读 · 0 评论 -
【编译原理系列】变量与过程翻译
声明语句的翻译声明语句的作用是为可执行语句提供信息,以便于其执行;对声明语句的处理,主要是将所需要的信息正确地填写进合理组织的符号表中变量的声明类型定义:为编译器提供存储空间大小的信息(预定义&自定义)变量声明:为变量分配存储空间组合数据的类型定义和变量声明:定义与声明在一起,定义与声明分离决定变量存储空间的是变量的数据类型定义确定存储空间,声明分配存储空间简单数据类型的存储空间是已经确定的,如integer可以占4个字节,real可以占8个字节,char可以占1个字节等原创 2021-01-24 14:47:54 · 1343 阅读 · 0 评论 -
【编译原理系列】语义分析与中间代码、符号表
中间代码要求中间代码具有如下特性,以便于编译器的开发移植和代码的优化优点:便于语法制导翻译既与机器指令的结构相近,又与具体机器无关。中间代码的主要形式:树、后缀式、三地址码等后缀式也被称为逆波兰表示,操作数在前,操作符紧随其后,无需用括号限制运算的优先级和结合性表示并不惟一x := first_token;while not end_of_exp loop if x in operands then push x; --原创 2021-01-24 14:47:26 · 3913 阅读 · 1 评论 -
【编译原理系列】自下而上分析法与 LR(1) 文法
自下而上分析从句子ω开始,从左到右扫描ω,反复用产生式的左部替换产生式的右部(句型中的句柄)、谋求对ω的匹配,最终得到文法的开始符号,或者发现一个错误:规范归约—剪句柄—移进/归约分析—SLR(1)分析器规范规约设αβδ是文法G的一个句型,若 存在S =*>αAδ,A =+>β,则 称β是句型αβδ相对于A的短语,特别的,若 有A→β,则 称β是句型αβδ相对于产生式A→β的直接短语一个句型的最左直接短语被称为句柄如:句型:id1+id2id3,短语:id1+id2id3、i原创 2021-01-24 14:47:09 · 4267 阅读 · 0 评论 -
【编译原理系列】自上而下分析法与 LL(1) 文法
自上而下分析自上而下分析是一种试探的过程,是反复使用不同产生式谋求与输入序列匹配的过程当既有左递归又有左因子的时候,先消除左递归消除左递归避免陷入死循环消除直接左递归若文法G中的非终结符A,对某个文法符号序列α存在推导A=+>AαA=^+>AαA=+>Aα,则称G是左递归的。若G中有形如A→Aα的产生式,则称该产生式对A直接左递归首先,整理A产生式为如下形式:A→ Aα1|Aα2|…|Aαm|β1|β2|…|βn其中αi非空[若αi为空,则形成一个有环的A产生式],βj原创 2021-01-24 14:45:45 · 1952 阅读 · 0 评论 -
【编译原理系列】语法分析与上下文无关文法
语法分析词法分析:字母是元素,组成字符串,记号的集合,线性结构,以字符流为输入语法分析:记号是元素,组成句子, 句子的集合,树结构,以记号流为输入语法的双重含意:语法规则:上下文无关文法(子集-LL文法或LR文法)语法分析:下推自动机(LL或LR分析器),自上而下和自下而上分析 (这两种都只能处理上下文无关文法的子类)语法分析器语法分析器是编译器前端的重要组成部分,中心部件语法分析器的两个重要作用:根据词法分析器提供的记号流,为语法正确的输入构造分析树(或语法树)检查输入中的语法(原创 2021-01-24 14:45:23 · 3626 阅读 · 2 评论 -
【编译原理系列】词法 DFA 及分析器构造
词法分析器构造方法和步骤正规式-NFA-DFA-最小化DFA-词法分析器用正规式描述模式(为记号设计正规式)为每个正规式构造一个NFA,它识别正规式所表示的正规集将构造的NFA转换成等价的DFA,这一过程也被称为确定化优化DFA,使其状态数最少,这一过程也被称为最小化根据优化后的DFA构造词法分析器由正规式构造NFA而不是DFA的原因是正规式到NFA有规范的一对一的构造算法由DFA而不是由NFA构造词法分析器的原因是DFA识别记号的方法优于NFA识别记号的方法词法分析器返回的完整记号原创 2021-01-24 14:45:04 · 6325 阅读 · 0 评论 -
【编译原理系列】词法分析与有限自动机
词法分析编译器中唯一与源程序打交道的部分;规定所有合法输入+识别合法输入任务:滤掉源程序中的无用成分,如注释、空格、回车等处理与具体平台有关的输入,如文件结束符的不同表示等根据模式识别记号,并交给语法分析器【主要任务】调用符号表管理器或出错处理器,进行相关处理工作方式:单独一遍扫描,输出记号流作为语法分析器的子程序,通过词法分析器的调用,然后返回记号与语法分析器并行工作的模式,以生产/消费的形式并行工作,通过队列存放已生产的“记号”词法词法的双重含义:规定单词形成的规则,原创 2021-01-24 14:44:46 · 1934 阅读 · 0 评论 -
【编译原理系列】编译及流程概述
语言分类面向机器机器语言:最基本的计算机语言汇编语言:用符号表示的指令的集合面向人类通用程序设计语言演变:过程->模块(抽象数据类型、ADT)->类共同特点:声明+操作声明:提供所操作对象的性质,生成相应的环境,一般是配置存储空间操作:确定操作的计算次序【过程头+过程体】,生成可执行的代码序列数据查询语言形式化描述语言E:E'+'E|E'*'E|id,核心部分是基于数学基础的产生式,例如:YACC按照范型划分的程序设计语言过程式语言、面向原创 2021-01-24 14:44:23 · 606 阅读 · 1 评论