编译原理:题(一)填空题

您所在的位置:网站首页 编译原理期末题库 编译原理:题(一)填空题

编译原理:题(一)填空题

2024-01-18 15:34| 来源: 网络整理| 查看: 265

文章目录

编译程序的工作过程一般划分为5个阶段:

词法分析语法分析语义分析和中间代码生成代码优化目标代码生成PS另外还有:符号表管理和出错处理

符号表管理 和 出错处理 是编译程序各阶段都涉及到的工作。

在编译器的工作过程中,实现语言关键字大小写不敏感的阶段是 词法分析 ,分析语言结构的阶段是 语法分析 。

程序的语义错误可分为 静态语义错误 和 动态语义错误。

推导的过程可以用一棵树来表示,被称为 分析树。

Lex和Yacc是用于生成 词法分析器 和 语法分析器 的工具。(注意是器)

语义规则的两种表示方式是 语法制导定义 和 翻译方案。

语法的概念:如何由语言基本符号组成程序中各个语法成分(包括程序)的一组规则叫做语法。

设G是一个文法,S是它的开始符号,如果S >= a,则称a是一个句型。仅由终结符号组成 的句型是一个句子。

在编译器的设计中,通常采用 EBNF 作为描述程序设计语言语法的工具,从语法上描述程序设计语言。

词法分析器分析的单词通常可以分为:关键词、标识符、运算符、常数和界符 几种。

在编译器设计中,在生成源代码之前,通常在内部采用一种不依赖目标机的结构的代码标识原代码,这种代码被称为 中间代码。

运行编译程序的计算机为 宿主机,运行编译程序所产生的目标代码的计算机被称为 目标机。

一般高级语言的翻译程序有 编译程序 和 解释程序 两种。

字母表 Σ \Sigma Σ,用 Σ ∗ \Sigma ^* Σ∗表示 Σ \Sigma Σ上所有有穷长的串集合, Σ ∗ \Sigma ^* Σ∗称为 Σ \Sigma Σ的 闭包。

正规式

描述含010的01串的正规式:(0|1)*010(0|1)*令 Σ = { a , b } \Sigma =\{a,b\} Σ={a,b},则 Σ \Sigma Σ上所有以b为首的字符串构成的正规集的正规式:b(a|b)*

正规式→正规集

Σ = { a , b } \Sigma=\{a,b\} Σ={a,b}上的正规式ab的正规集是 {a,b}。设 Σ = { a , b } \Sigma=\{a,b\} Σ={a,b}, Σ \Sigma Σ上的正规式 ( a ∣ b ) ( a ∣ b ) (a|b)(a|b) (a∣b)(a∣b)相应是 {aa,ab,ba,bb}。

不确定有限自动机中的有限是指 状态的数量 是有限的。

识别3型文法描述语言的自动机是 有限自动机。

有穷自动机接受的语言是 正规语言。

NFA的映像f是从"状态X字"映射到"状态子集",f为 多 值函数。

CFG的定义包含有

非终结符集合终结符集合产生式集合开始符号

自上而下的语法分析:

在自上而下的语法分析中,需要消除左递归以 避免产生死循环,需要提取左因子以 避免虚假匹配。在自上而下的语法分析中,应该先消除文法的 直接左递归 , 再消除文法的 间接左递归。在自上而下的语法分析中,需堆输入序列进行 规范规约,反复用产生式的左步替换 句型中的句柄,最终得到开始符号。

规范规约是最 左 规约。

LR分析的语法制导翻译将语义规则放在产生式右部的 最右边,LR分析器在执行 规约 动作时执行语义动作。

LR分析是按规范句型的 句柄 为可规约串。

为了将非LL(1)变换为与之等价的LL(1)文法,通常采用 消除左递归 和 提取左公共因子 对文法进行等价变换。

文法产生二义性的原因是缺少对文法符号 优先级 和 结合性 的规定。

回溯: 当文法的 候选项首符集 两两不相交 时,该文法对应的句子的分析不含有回溯性。

设 z = a b c z=abc z=abc,则z的固有头是 { ϵ \epsilon ϵ,a,ab}。

活前缀是指 规范句型 的一个前缀,这种前缀不含 句柄 之后的任何符合。

后缀式(逆波兰式): 假说:

只适合1、2情况的假说:[id从左到右][符号从右到左]只适合2、3、4情况的假说:[id从左到右][符号从右到左],其中*号直接写在a*b后ab*

a*-(b+c):abc+-*x=a+(b*c):xabc*+=a*b+(c+d/(e+f)):ab*cdef+/++x+y*z/(a+b):xyz*ab+/+

CFG无法描述语法中的变量声明与引用,可在语义规则中通过对 符号表 的插入、查找等操作实现。

不同的编译程序关于数据空间的存储分配策略可能不同,但大部分编译中采用的方案有两种:静态存储分配方案 和 动态存储分配方案。

程序运行时的内存的划分与数据空间的动态存储分配策略有 栈分配 和 堆分配。

对于栈式符号表,引入一个显示嵌套层次关系表- DISPLAY表,该表总是指向当前正在处理的最内层的过程的子符号表在栈符号表中的起始位置。

4 ∗ 4 4*4 4∗4二维数组A每维下界均为1,每个元素占1个单位,若数组A的首地址为a,并且以行为主存储,则元素A[3,2]的地址是 a+9。(a+2*4+2-1)

假设二位数组按行存放,而且每个元素占用一个存储单元,则数组a[1…15,1…20],某个元素a[i,j]的地址计算公式为 a + ( i − 1 ) ∗ 20 + j − 1 a+(i-1)*20+j-1 a+(i−1)∗20+j−1。

综合属性在分析树上的计算次序与 自上而下 语法分析形成分析树的过程一致。

参数传递的方法:

值调用引用调用复写-恢复

文法符号的属性有 综合属性 和 继承属性。

结点的 继承 属性值由该结点的兄弟结点和父结点的属性值计算。

如果分析树中一结点的属性b依赖于属性c,那么这个结点的属性b的语义规则的计算必须在定义属性c的语义规则的计算 之后。

下面的语义规则是某L属性文法的一个语义规则,从中可以看出,A.s是 综合 属性,B.x是一个 继承 属性。A-->BCD {A.s=B.x+C.y;D.z=B.i;}

对中间代码优化涉及的范围分为 局部优化、过程间优化 和 全局优化。

局部优化 局部优化主要包括 合并已知量、利用公共子表达式 和 删除无用赋值 等内容。 局部优化是在 一个基本块 范围内进行的一种优化。


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3