![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
编译原理
文章平均质量分 72
之墨_
这个作者很懒,什么都没留下…
展开
-
X86 AT&T常用寄存器及其操作指令
操作这些寄存器的指令有:mov、add、sub、inc、dec、cmp、xchg、push、pop、lea、jmp、call等。esp寄存器:当我们需要访问堆栈帧中的变量时,可以使用esp寄存器来获取堆栈帧的基址,以便能够正确地访问堆栈帧中的变量。ebp寄存器:当我们需要调用一个函数时,可以使用ebp寄存器来获取函数的参数,以便能够正确地传递参数给函数。eax寄存器:当我们需要调用一个函数时,可以将函数的参数存储在eax寄存器中,以便函数能够正确地接收参数。ebx寄存器:当我们需要访问一个数组时,可以原创 2023-02-25 19:46:16 · 1406 阅读 · 0 评论 -
编译原理【文法设计】—每个a后面至少一个b、ab个数相等,ab个数不相等的所有串
Σab→abSS→bSS→→aB∣bA∣ϵA→aS∣bAAB→bS∣aBB。a和b个数不相等的所有串)a和b个数相等的所有串每个a后面至少有一个b的所有串为字母表a,b上的下列每个语言设计一个文法,正规式原创 2023-02-24 10:27:12 · 1444 阅读 · 1 评论 -
编译原理【运行时环境】—什么是活动记录、 活动记录与汇编代码的关系
什么是活动记录?活动记录-AR (Activation Record)活动记录的内容举个栗子再举个栗子再再举个栗子相信大家也和我一样,觉得编译原理在运行环境这部分比较难理解,由于机器是栈式运行的,所以里面很多操作并不利于我们理解,下面分享一下我自己对活动记录这一块的部分理解,也有一些x86汇编的内容。原创 2023-02-23 16:13:21 · 2553 阅读 · 2 评论 -
编译原理—基本块划分,循环流图
汇编代码上进行基本块划分,构建流图,进行基本块划分,构建流图。原创 2023-02-14 09:25:00 · 1131 阅读 · 0 评论 -
编译原理—翻译方案、属性栈代码
写一个翻译方案,它输出每个 a 的嵌套深度。例如,对于句子 (a, (a, a)),输出的结果是 1 2 2。;写一个翻译方案,它打印出每个 a 在句子中是第几个字符。例如,当句子是 (a, (a, (a, a),(a)))时,打印的结果是 2 5 8 10 14。写出他们的属性栈代码原创 2023-02-13 20:54:26 · 2904 阅读 · 1 评论 -
编译原理—栈式存储分配、有参函数的活动记录、参数传递与x86汇编
编译原理—参数传递与x86汇编;参数分别是整型、指针、引用时的参数传递及其汇编代码、栈式存储分配原创 2023-02-09 16:19:37 · 530 阅读 · 0 评论 -
编译原理—数组元素翻译
有如下公式:w为元素大小,整型int为4(...i1∗n2i2∗n3i3....∗nkik∗wA−...low1∗n2low2∗n3low3...∗nklowk∗w)low11low21high120high220n1high1−low1120n2。原创 2023-02-09 00:01:04 · 447 阅读 · 0 评论 -
x86汇编程序基础(AT&T语法)
x86汇编程序基础(AT&T语法)、编译原理—x86汇编指令原创 2023-02-08 19:36:10 · 111 阅读 · 0 评论 -
编译原理—多维数组声明、数组元素初始化规则
⼤括号中的每个元素依次初始化数组的⼀个地址,或者⼀块如果元素是数字,那就直接初始化该地址如果元素是有⼤括号的,那么⽤它来初始化⼀块连续地址,这块地址对应以当前位置作为起点的最⾼维的数组可以看到,如果大括号前面已经有完整的2x2一块或者他是起点,那么直接初始化一块连续的地址,不足补0;如果他前面有不足2*2个元素,那么把他带进去,后面补0;则上述求下标结果如下。原创 2023-02-06 21:15:14 · 575 阅读 · 0 评论 -
C语言指针、引用
//只声明而不初始化是错误的,因为引用就是一个别名,//如果不指明它是谁的别名,则会报错//引用必须初始化,引用初始化就是将引用绑定到一个变量上。原创 2022-12-11 13:14:41 · 370 阅读 · 0 评论 -
编译原理习题—循环优化、强度消弱、自然循环、短路计算
(1)针对以下C程序片段,直接在源程序上进行循环优化(循环不变计算外提,强度消弱与复写传播优化等) 循环不变计算外提: 在第三层循环中,不变, 强度消弱: 复写传播优化:复写传播可以删去(2)针对Homework 6的(1)中的C函数,在其三地址码基础上,给出流图,回边和自然循环。 三地址码: 流图:B14NextB13i = i+1 goto B2B12j = j + 1 goto B4B11t33 = t32 goto B12B10t33 = t26B9if t26 >原创 2022-12-07 20:29:02 · 587 阅读 · 0 评论 -
编译原理—计算三地址码、布尔语句翻译
(1)针对以下C函数,给出其函数体三地址码。 (b)更精简的短路代码翻译方案。(2.1)数值计算方式。原创 2022-11-29 21:34:09 · 1611 阅读 · 0 评论 -
编译原理—x86汇编指令
add ax,bx 将 A X B X 中的数值相加,结果存在A X AX=AX+BX。mov ax,bx 将寄存器B X 中的数据送入寄存器AX AX=BX。预留xxx字节给函数临时变量.mov 内 单 ,寄存器 比如: mov [0],ax。mov 寄存器,内 单 比如: mov ax,[0]sub 内 单 ,寄存器 比如:sub [0],ax。mov 寄存器,寄存器 比如: mov ax,bx。add 寄存器,寄存器 比如:add ax,bx。sub 寄存器,寄存器 比如:sub ax,bx。原创 2022-11-27 20:54:15 · 1537 阅读 · 0 评论 -
编译原理—中间代码生成、布尔表达式翻译、短路计算、控制流语句翻译、条件语句、循环语句
回填技术 -布尔表达式短路计算翻译中,产生了转移目标不明确的条件或无条件代码; -当有关目标地址确定后,可将这些目标地址填回到有关代码中。 -将有相同转移目标的转移代码的编号串起来形成链;可以方便回填目标地址。原创 2022-11-24 21:03:13 · 1443 阅读 · 0 评论 -
编译原理—运行环境、局部存储分配、活动记录、全局栈式存储分配、非局部名字的访问、参数传递
活动记录-AR (Activation Record) 是一连续存储区域,用于管理与存放和程序单元执行相关的重要信息。AR中的内容 - 临时区域。用以保存临时计算结果 - 局部数据区。源程序中程序单元声明的局部变量对应在此区域。 - 机器状态保存区。存有机器的寄存器,程序指令计数器 ip(返回地址)等。原创 2022-11-24 20:35:07 · 984 阅读 · 0 评论 -
编译原理—语法制导翻译、S属性、L属性、自上而下、自下而上计算
程序单元的执行需要: 代码段+活动记录(程序单元运行所需的额外信息,如参数,局部数据,返回地址等)黄色表示该属性就位于栈顶,省略栈代码。原创 2022-11-24 20:15:22 · 2479 阅读 · 0 评论 -
编译原理—语义分析、语法制导翻译、翻译模式、数组元素的翻译、中间代码生成
引入语法制导定义的目的:为了将语义属性关联到文法符号:为了将语义规则关联到产生式:有效地将语法和语义关联起来。为相应的语法成分设置表示语义的属性,属性的值是可以计算的。根据属性值计算的关联关系,将其分成综合属性和继承属性;根据属性文法中所含的属性将属性文法分成:S-属性文法和L-属性文法;原创 2022-11-23 11:30:33 · 1948 阅读 · 0 评论 -
编译原理—指针、引用嵌套声明
个元素的数组,该数组的每一个元素都是一个指针,并且指向一个具有。个元素的数组,数组中每一个元素都是一个指向整形元素的指针。个元素的数组,该数组每一个元素都是一个指针,指向一个具有。个元素的数组,该数组每个元素都是一个指向整型元素的指针。个元素的数组,该数组的每一个元素都是一个指向整型数。是一个指针,其指向一个具有。原创 2022-11-08 13:54:01 · 195 阅读 · 0 评论 -
PL/0指令集
在源程序无错的情况下,编译器每编译完一个分程序,就列出该分程序的代码,这由编译器的listcode 过程完成。每个分程序的第一条指令是 jmp 指令,其作用是绕过该分程序声明部分产生的代码(即绕过内嵌过程的代码)。在其他情况,a 或是一个数(lit,int),或是一个程序地址(jmp,jpc,cal),或是一个数据地址(lod,sto)。(6)jmp,jpc:对应条件语句和循环语句的无条件转移和条件转移的控制转移指令;(5)int:增加栈顶寄存器的值,完成对局部变量的存储分配的指令;原创 2022-11-06 16:04:13 · 1128 阅读 · 0 评论 -
PL/0 语言简介、PL/0 文法
虽然它只有整数类型,但它是相当完全的可嵌套的分程序(block)的程序结构,分程序中可以有常量定义、变量声明和无参过程声明,过程体又是分程序。PL/0 有赋值语句、条件语句、循环语句、过程调用语句、复合语句和空语句。其中的标识符 ident 是字母开头的字母数字串,number 是无符号整数,begin、call、const、do、end、if、odd、procedure、then、var、while 是保留字。PL/0 程序设计语言是一个较简单的语言,它以赋值语句为基础,构造概念有。该类型的常量和变量。原创 2022-11-05 21:42:13 · 6593 阅读 · 0 评论 -
PL/0活动记录、静态访问链、动态控制链
2. 动态链DL:存放的是调用该过程前正在运行过程的活动记录的起始单元。这样,每当一个过程被调用,就需要在栈上先分配3个空间用来存储上述信息,然后才是分配空间存储过程的局部变量。3. 返回地址RA:记录该过程返回后应该执行的下一条指令地址,即调用该过程的指令执行时指令地址寄存器p的内容加1。1. 静态链SL:存放的是定义该过程所对应的上一层过程,最近一次运行时的活动记录的起始单元。把过程的一个活动所需要的信息组成的一块连续的存储单元 ,称为活动记录。过程的一次执行称为过程的一次活动。原创 2022-11-05 20:27:32 · 1567 阅读 · 0 评论 -
证明LL(1)、SLR(1)、LALR(1)文法—编译原理第三章习题陈意云张昱
请给出所有含移进-归约冲突的规范$LR(1)$项目集,以说明该文法确实不是$LR(1)$的。以下项目集存在移进-归约冲突,即输入符号为$a$时,无法判断进行移进$a$还是进行$\epsilon$规约,所以该文法不是$LR(1)$的。原创 2022-10-23 16:16:52 · 3681 阅读 · 0 评论 -
什么是上下文无关文法、最左推导和最右推导—编译原理
S→aSbS→abS → aSb\\S → abS→aSbS→ab这个文法有两个产生式,每个产生式左边只有一个非终结符SSS,这就是上下文无关文法,因为你只要找到符合产生式右边的串,就可以把它归约为对应的非终结符。最左推导:每一步替换最左边的非终结符最右推导:每一步替换最右边的非终结符最右推导称为规范推导。最右推导对应于最左规约(规范规约)原创 2022-10-22 15:26:04 · 6749 阅读 · 2 评论 -
如何消除文法二义性、如何判断二义文法—编译原理
SLR(1)、LR(1)、LALR(1)文法之间的关系,什么是LL(1)、LR(0)、LR(1)文法,什么是句柄、什么是自上而下、自下而上分析,何时需要消除左递归,如何消除左递归,如何判断二义文法及消除文法二义性,什么是上下文无关文法、最左推导和最右推导原创 2022-10-22 15:24:26 · 12686 阅读 · 4 评论 -
怎么消除左递归、什么时候需要消除左递归、提取左因子—编译原理
SLR(1)、LR(1)、LALR(1)文法之间的关系,什么是LL(1)、LR(0)、LR(1)文法,什么是句柄、什么是自上而下、自下而上分析,何时需要消除左递归,如何消除左递归,如何判断二义文法及消除文法二义性,什么是上下文无关文法、最左推导和最右推导原创 2022-10-22 15:23:47 · 6247 阅读 · 0 评论 -
什么是句柄、什么是自上而下、自下而上分析—编译原理
SLR(1)、LR(1)、LALR(1)文法之间的关系,什么是LL(1)、LR(0)、LR(1)文法,什么是句柄、什么是自上而下、自下而上分析,何时需要消除左递归,如何消除左递归,如何判断二义文法及消除文法二义性,什么是上下文无关文法、最左推导和最右推导原创 2022-10-22 15:22:46 · 7417 阅读 · 1 评论 -
什么是LL(1)、LR(0)、LR(1)文法、LR分析表—编译原理
SLR(1)、LR(1)、LALR(1)文法之间的关系,什么是LL(1)、LR(0)、LR(1)文法,什么是句柄、什么是自上而下、自下而上分析,何时需要消除左递归,如何消除左递归,如何判断二义文法及消除文法二义性,什么是上下文无关文法、最左推导和最右推导原创 2022-10-22 15:22:01 · 9792 阅读 · 4 评论 -
编译原理【词法分析】—LR(0)、SLR(1)、LR(1)、LALR(1)文法之间的关系
SLR(1)、LR(1)、LALR(1)文法之间的关系,什么是LL(1)、LR(0)、LR(1)文法,什么是句柄、什么是自上而下、自下而上分析,何时需要消除左递归,如何消除左递归,如何判断二义文法及消除文法二义性,什么是上下文无关文法、最左推导和最右推导原创 2022-10-22 15:20:56 · 4189 阅读 · 0 评论 -
编译原理—被5整除的01串的正规式怎么写、根据DFA写出上下文无关文法、根据DFA提取正规式
表示被5整除的二进制串的DFA,有限自动机,确定自动机一个数$mod\ 5 结果为 $0,1,2,3,4$以此为 $5$ 种状态。由于要求是能被 $5$ 整除的数,$0 mod 5 = 0$满足,故状态 $0$ 为初始$\&$最终状态,状态表如下:原创 2022-10-19 19:56:39 · 1646 阅读 · 0 评论 -
编译原理习题—LL(1)文法、构造预测分析器、递归下降分析、LR(0)、SLR(1)、LR(1)分析—陈意云张昱第三版第三章
以下项目集存在移进-归约冲突,即输入符号为。的移进-归约冲突,但这两个冲突,在规范。规约,出现移进-归约冲突,所以不是。情况下不存在,因为只有输入符号为。请给出所有含移进-归约冲突的规范。,出现归约-归约冲突,所以不是。项目集中任意项目的搜索符只能为。项目集,以说明该文法确实不是。,并描述该文法产生的语言。出现在同一个项目集中,因为。除上述冲突,同理还存在一个。的归约操作,所以此文法是。项目集,所以此文法也是。该文法存在一个状态,,所以当 输入符号为。文法,且此文法的规范。时,无法判断进行移进。原创 2022-10-19 09:23:31 · 3738 阅读 · 4 评论