1.概念
第一章-绪论
- 翻译,是指在计算机中放置一个能由计算机直接执行的翻译程序,它以某一种程序设计语言(源语言)所编写的程序(源程序)作为翻译或加工的对象,当计算机翻译程序时,就将它翻译为与之等价的另一种语言(目标语言)的程序(目标程序)。
- 编译程序与运行系统合称为编译系统。
- 源程序的编译(或汇编)和目标程序的执行不一定在同一种计算机上完成。当源程序由另一种计算机进行编译(或汇编)时,我们将此种编译(或汇编)称为交叉编译(或汇编)。
- 解释程序也以源程序作为它的输入,它与编译程序的主要区别是在解释程序的执行过程中不产生目标程序,而是解释执行源程序本身。
- 编译程序的主要功能是把用高级语言编写的源程序翻译为等价的目标程序。
- 编译程序的8个组成部分:
也可以分为5部分
(1) 词法分析程序
(2) 语法分析程序
(3) 语义分析与中间代码分析程序
(4) 代码优化程序
(5) 目标代码生成程序
综上:
(1) 词法分析程序(也称扫描器)
(2) 语法分析程序
(3) 语义分析程序
(4) 中间代码分析程序
(5) 代码优化程序
(6) 目标代码生成程序
(7) 错误检查和处理程序
(8) 信息表格的管理程序
- 编译程序的逻辑结构:(八个组成部分间的控制流程和信息流程)
源程序->(1)词法分析程序->(2)语法分析程序->(3)语义分析程序->(4)中间代码生成->(5)代码优化程序->(6)目标代码生成->目标代码
和以上1 2 3 4 5 6 相关联的还有(7)错误检查和处理程序和(8)信息表管理程序。
- 用形如(Class,Value)的序偶(二元式)作为一个单词的内部表示。Class表示单词的类别,Value是单词的值。
- 语法分析程序以词法分析程序所输出的用内部编码格式表示的单词序列作为输入,其任务是分析源程序的结构,判别他是否为相应程序设计语言中的一个合法程序。
- 前后文无关文法 CFG
- 常见的中间代码形式:逆波兰表示、三元式、四元式、树形结构
- 目标代码生成程序以语义分析(或优化处理)所产生的中间代码作为输入,其功能是根据前面各阶段对源程序进行分析和加工所得到的有关信息,将中间代码翻译为机器语言或汇编语言形式的目标程序。
- 编译程序的前端:(1)(2)(3)(4) 分析部分
编译程序所完成的处理工作只依赖源程序,而与运行目标程序的计算机无关。
- 编译程序的后端:(5)(6) 综合部分
只依赖于目标语言
- 抽象语法树 AST
第二章-前后文无关文法和语言
- 把用一组数学符号和规则来描述语言的方式称为形式描述,而把所用的数学符号和规则称为形式语言。
- 字母表:由若干元素所组成的有限非空集合,其中每一元素称为符号,又称字母表为符号集。
- 符号串:用字母表中的符号所组成的任何有限序列称为符号串。
- 把符号串中所含符号的个数称为符号串的长度。不包含任何符号的符号串称为空符号串。
- 符号串的前缀、后缀
设x是一个符号串,把从x的尾部删去若干个(≥0)符号之后所余下的部分称为x的前缀。
设x是一个符号串,把从x的头部删去若干个(≥0)符号之后所余下的部分称为x的后缀。
X=abc ,则ε、a、ab、abc都是x的前缀;
则ε、c、bc、abc都是x的后缀。
若x的前缀(后缀)不是x本身,则将其称为x的真前缀(真后缀)。
- 符号串的子串
从一个符号串中删去它的一个前缀和一个后缀之后余下的部分称为该符号串的子串。x的任何前缀和后缀都是x的子串,但子串不一定是x的前缀或后缀。
ε既是前缀、又是后缀、也是子串。
- 一个符号串x与其自身的n-1次连接称为此符号串的n次方幂。记作
- 字母表A的正闭包就是由A中字母所构成的一切符号串的集合,而自反传递闭包仅比多包含一个空符号串ε
- 一个文法G[S]可表示成形如(,,P,S)的四元式,其中,,P,均为非空有限集,分别称为终结符号集,终结符号集和产生式集。S∈,是文法的开始符号。把出现在产生式左部和右部的一切符号组成的集合称为符号集,记做V。
- 如果一个文法中至少含有一个递归的非终结符号,则将此文法称为递归文法。
- 如果一个语言是无限的,则定义此语言的文法必然是递归的。
- 前后文无关文法等价问题是不可判定的,即不存在一种算法,它能判别任意两个前后文无关文法是否等价。
- 把左部变量为A的产生式称为A-产生式
- 句型分析,是指构造一种算法,用以判断所给的符号串是否为某一文法的句型。
- 句型分析的方法:自顶向下的分析 自底向上的分析
- 对于一给定的文法来说,从其开始符号到某一句型,或从一个句型到另一句型的推导序列可能不唯一。
- 把能由最左推导推出的句型称为左句型。
- 把能由最右推导推出的句型称为右句型。
- 最右推导称为规范推导,右句型称为规范句型。
- 最右推导的逆过程是最左规约。
- 最左推导的逆过程是最右规约。
- 最左规约称为规范规约。
- 对于一个给定的语法树而言,它仅对应于唯一的最左推导和最右推导。
- 前后文无关文法是否具有二义性是不可判定的。
- 前后文无关语言的先天二义性也是不可判定的。
- 一个句型的最左直接短语(即规范分析中,最先被规约的子串)称之为此句型的句柄。
- 对于无二义性的文法,它的任何句型都只有唯一的语法树,因而它的任何规范句型都只有唯一的句柄,而且对于某些无二义性的文法,由于其中不含有左部不同而右部相同的产生式,故能确保句柄规约的唯一性。
- LL分析要求文法无左递归性。
- 算符优先分析要求文法不含有ε-产生式。
- LR分析要求文法无二义性。
- 如果一个产生式的左部或右部含有无用符号,则此产生式称为无用产生式。
- 形如A->A的产生式,即使A是一个有用的符号,此类产生式也是不必要的。因而一开始就可以将这样的产生式删去。
- 将不含形如A->A的产生式和不含无用符号及无用产生式的文法称为已化简的文法。
- ε-产生式,是指右部为一空符号串ε的产生式。
- 0型文法又称短语结构文法(PSG)。由0型文法所描述或定义的语言称之为0型语言。
- 1型文法又称前后文有关文法(CSG)。相应的语言称为1型语言或前后文有关语言。
- 2型文法又称前后文无关文法(CFG)。由2型文法所定义的语言称之为2型语言或前后文无关语言。
- 把左线型文法和右线性文法统称为3型文法或正规文法。由3型文法描述的语言称为3型语言或正规语言。
- 四类文法在描述语法的能力上是从0型文法开始依次减弱的。
- BNF表示法等价于前后文无关文法。凡是能用BNF定义的语言都是前后文无关语言。
第三章-词法分析及词法分析程序
- 词法分析和语法分析两个阶段的划分,仅仅是对整个编译程序的逻辑功能而言,而不一定指的是编译程序的执行流程。
- 词法分析主要任务:
(1) 读源程序,产生单词符号。
(2) 滤掉空格,跳过注释、换行符。
(3) 追踪换行标志,复制出错源程序。
(4) 宏展开。
- 利用状态转换图对符号串进行识别的方法是一个自顶向下的分析算法。
- 一个确定的有限自动机(DFA)实际上是相应的状态转换图的一种形式描述,或者说,是状态转移矩阵的另一种表示。
- 非确定的有限自动机(NFA)
- DFA与NFA的区别
- NFA--->DFA DFA-->化简
见章节大题
- 正规文法和有限自动机在描述同一语言类的意义下是相互等价的。
正规表达式是典型的词法规则描述工具。
描述程序设计语言中单词的工具主要有三种:
正规式、正规集、自动机
- 如果我们把每类单词均视为一种语言,那么每一类单词都可用一个正规式来描述,而每一类单词中的全体单词也就组成了相应的正规集。
- 若两个正规式所表示的正规集相同,则认为二者等价。eg:
b(ab)*=(ba)*b (a*b*)*=(a|b)*
- 正规式 :(0|1)(0|1)* 正规集: ∑ 上的 ”数“的全体
第四章-语法分析和语法分析程序
- 对于表达式,常采用算符优先分析法;对于语言的其他的部分,则采用递归下降分析法。
- 语法分析的方法,就产生语法树的方向而言,可以分为自顶向下和自底向上。
- 采用自顶向下的语法分析,必须首先消除文法的左递归性(包括一切直接左递归和一般的左递归)。
- LL(1)文法:相应的语法分析将自左至右的顺序扫视输入符号串,并按最左推导的方式来进行。“1”表示分析过程中,每做一次推导,只要向前查看一个输入符号便能决定所选用的产生式,而且这种选择是准确无误的。
- 递归下降法是指对文法的每一非终结符号,都根据相应产生式各候选式的结构,为其编写一个子程序,用来识别该非终结符号所表示的语法范畴。
- 预测分析法是一种比递归子程序法更为有效的自顶向下语法分析方法。此种方法的分析器由一张预测分析表、一个控制程序和一个分析栈组成。
- 能由某一LL(1)文法产生的语言称为LL(1)语言。
- LL(1)文法的主要结论:
(1) 任何LL(1)文法都是无二义性的。
(2) 左递归文法必然不是LL(1)文法。
(3) 存在一种算法,它能判断任意的文法是否为LL(1)文法。
(4) 存在一种算法,它能判定任意两个LL(1)文法是否产生相同的语言。
(5) 不存在这样的算法,它能判定任意的前后文无关语言是否为LL(1)语言。
(6) 非LL(1)语言(即不能由任何LL(1)文法产生的前后文无关语言)是存在的。
- 自顶向下的语法分析:
(1) LL(1)文法
(2) 递归下降分析法
(3) 预测分析法
- 自底向上的语法分析:
(1) 简单优先分析法
(2) 算符优先分析法
(3) LR分析法 包括LR(0) SLR(1) LR(1) LALR(1)
- 移进-规约分析过程采取的动作:
(1) 移进
(2) 规约
(3) 接收
(4) 报错
- 如果G是一算符文法,则G的任何产生式的右部,都不会出现两非终结符相邻的情况。
- 在算符优先分析中,每次规约的符号串,是当前句型的最左素短语。
- 算符优先分析结论:
(1) 按算符优先关系所确定的应被规约的子串恰好是当前句型的最左素短语。
(2) 尽管算符优先分析也属于自底向上语法分析的范畴,但却不是严格从左至右的规范分析,每步所得的句型自然也不是一个规范句型。
(3) 由于算符优先分析法中每一句型的最左素短语是唯一的,因此,若不顾及用非终结符来标记的那些节点上的名字,那么每一句子的树架子是唯一的。
- 不带回溯的自顶向下分析要求文法不存在左递归性,并且每一产生式的各候选式的终结首符集两两不相交。
- 算符优先分析方法要求文法的各终结符号序偶间至多只有一种优先关系。
- LR(k)文法的研究证明:
(1) 每一LR(k)文法都是无二义性文法。
(2) 一个由LR(k)文法所产生的语言也可由某一LR(1)文法产生。
- LR(0) SLR(1) LR(1) LALR(1) 分析器的比较:
(1) LR(0)分析器的分析能力最低,但它是构造其余三种LR分析器的基础。
(2) SLR是“简单LR”分析的缩写,是为了解决构造LR(0)分析器所出现的问题而形成的一种方法。分析能力比LR(0)分析器稍强。
(3) LR(1)分析器的分析能力是四种LR分析器的最强的。LALR(1)分析器的能力介于SLR(1)和LR(1)之间。分析表的规模比LR(1)分析表要小得多。
- LR(0)项目集中的相容指不出现这样的情况:
(1) 移进项目和规约项目并存
(2) 多个规约项目并存
第五章-语法制导翻译及中间代码生成
- 从广义上讲,在一个多遍扫描的编译程序中,每扫描源程序一次,都将产生一种与之等价的中间代码,且越往后越接近目标代码。
- 语法翻译制导模式 Syntax-Directed Translation Schema SDTS 这种模式实际上是对前后文无关文法的扩充。
- 什么是语法制导翻译?
就是对文法中的每个产生式都附加一个语义动作或语义子程序,且在语法分析过程中,每当需要使用一个产生式进行推导或归约时,语法分析程序除执行相应的语法分析动作外,还要执行相应的语义动作或调用相应的语义子程序。每个语义子程序都指明了相应产生式进行分析时所应采取的语义动作
- 一个文法符号X的语义信息称之为语义属性或简称为属性。
- 语法制导翻译仅对每一产生式定义了相应的语义处理,而未对如何使用产生式做任何限制,所以这种模式既可用自顶向下的语法分析,也可用自底向上的分析。
- 语法制导翻译方法的实质。
就是根据文法中每个产生式所蕴含的语义,为其配备若干个语句或子程序,对所要完成的语义处理功能进行描述。这些语句和子程序统称为语义子程序或语义动作。
- 将语义以“属性”的形式附加到各个文法符号上,再根据产生式所蕴含的语义,给出每个文法符号的属性的求值规则,从而形成一种附带语义属性的前后文无关文法,即属性文法。
- 文法符号的属性就是它的语义性质。
- 终结符号至少有一种属性,即词文。
- 非终结符号的属性之值从其它符号的属性计算而得,是由其它符号的属性定义的。
- 如果在一棵语法树中将每个节点均视为由若干个域组成的记录,则可将其中的一些域用来存放相应文法符号诸属性之值。并可用属性来为这些域命名。
- 将每个节点标注相应属性值的语法树称为加注语法树或染色树。
- 一个文法符号X在相应节点的综合属性之值,由其子节点的属性和(或)X的其他属性,通过相关属性规则经计算而得。故综合属性的求值在语法树中是自下而上的方式进行的。
- X的继承属性之值则由X的父节点和(或)其他兄弟节点来定义,故继承属性的求值是按自上而下的方式进行的。
- 每个产生式中的任一文法符号的属性计算规则只能是唯一的。
- 良定义的概念!
- 一个属性文法是良定义的,当且仅当对于它的每棵语法树T,相应的依赖关系图是一个无回路有向图。
- 在文法产生式右部适当的位置上插入语义动作而得到的新文法称为翻译文法或增广文法。在一翻译文法中,若每个产生式右部中的全部语义动作均出现在所有文法符号的右边,这样的翻译文法为波兰翻译文法。
- 属性翻译文法 Attribute Translation Grammar
- 终结符号的综合属性所具有的初始值,由编译系统的词法分析程序提供。对于产生式左部符号的继承属性,将继承上一层产生式该符号已有继承属性之值。对产生式右部非终结符号的综合属性之值,则当该非终结符号出现在某个产生式q的左部时,通过q中相关符号的某些属性经计算求得。动作符号的属性取决于该动作函数的参数(自变元)来源:当自变元来自其他符号的属性时,是继承属性;反之,是综合属性。
- 从遍历属性化语法树的角度看,继承属性的计算是先序遍历的,而综合属性的计算是后序遍历的。对一个文法符号而言,总是先计算其继承属性,再计算综合属性。
- S-属性文法一定是L-属性文法,而且要求每个非终结符号只具有综合属性。
- 当变量出现在赋值号左侧时,代表的是为其分配的单元地址;而出现在赋值号右侧时,代表的是该单元内存放的具体内容。
- 数组内情向量表包括:
(1) 数组类型
(2) 维数
(3) 各维的上下界
(4) 各维的界差
(5) 每维的长度
(6) 数组的首地址
- 两种传递实参信息的代码结构:
(1) 在控制转入被调过程之前,将各实参信息送入相应形参单元。(先结合、后调用)
(2) 把实参信息依次排列在转子指令之前,在执行转子指令而进入过程后,被调过程将根据本次调用的返回地址,找到存放实参信息的单元位置,并把各实参信息送入相应形参的形式单元,其后再安排执行过程体的中间代码。(先调用、后结合)
第六章-符号表
- 符号表的作用?
在编译程序过程中,收集、记录和使用源程序中语法符号的类型和特征等相关信息。
这些信息以表格形式存储于系统中。如常数表、变量名表、数组名表、过程名表等等。统称为符号表。符号表的每一登记项,将填入名字标识符以及与该名字相关联的信息。这些信息全面反映各个符号的属性和编译过程中的特征。符号表组织的好坏直接影响编译系统的运行效率。
- 变量名包含的内容:(符号的属性有哪些?)
(1) 种属(简单变量、数组、记录结构)
(2) 类型(整型、实型、字符串等等)
(3) 所分配的数据区地址(相对地址)
(4) 如果是数组,填写内情向量,并指出内情向量首地址
(5) 如果是记录结构,把登记项与各分量按某种方式连接起来
(6) 如果是形参,记录其类型
(7) 对于fortran语言,设置COMMON链地址栏及EQUIVALENCE链地址栏,以便将相关的COMMON元或EQUIVALENCE元链接在一起
(8) 定义性出现或引用性出现标志
(9) 对该变量是否进行过赋值的标志
- 在组织一个编译程序的符号表时,应考虑如下问题:
(1) 怎样确定符号表信息栏所应存放的内容?
在能充分反映名字具体属性的前提下,应使每一登记项信息栏的长度尽可能短,以节省表区所需的存储空间。
(2) 如何确定信息栏的格式,即如何组织信息栏的各个子栏?
这依赖于对符号表登记项检索或填入信息的方式,以及目标机器的字长和指令系统。一般应采用简单而有效的方式来检索或填入信息。
(3) 由于标识符种属的不同,描述属性的信息也就不同,怎样处理信息栏长度的不同?
使不同种属名字的登记项信息在格式上尽可能一致。
一种做法是为多数名字登记项确定一个基本长度,对于需要较多空间的标识符,以两个或更多个相连的基本长度项作为一个登记项。
另一种方式是用间接表的方式阻止符号表。
第七章-运行时的存储组织与分配
- 运行时的内存划分:
(1) 目标程序区,用来存放所生成的目标程序。
(2) 静态数据区,用来存放编译程序本身可以确定所占用存储空间大小的数据。
(3) 运行栈区,在运行时才能分配存储空间的数据就分配在运行栈。
(4) 供用户动态申请存储空间的堆区。
- 运行时的分配策略:
(1) 静态分配。
(2) 栈式分配,或称栈式动态分配。
(3) 堆式分配,或称堆式动态分配。
- 活动记录包括几部分?
(1) 返回的值
(2) 实在参数
(3) 任选的控制链
(4) 任选的存取链
(5) 保存的机器状态
(6) 局部数据
(7) 临时变量
第八章-代码优化
- 循环不变量外提的条件是什么?
对于循环中的不变运算 (s) A:=B OP C
条件1:(1)s所在的基本块是循环L的各出口节点的必经节点。
(2)s是循环L的唯一定值点。
(3)对于A在循环L中的全部引用点,只有A在(s)的定值才能到达。
条件2:在满足条件1(2)及1(3)的前提下,当控制从循环L的出口节点离开循环时,变量A不再活跃。
循环L中凡是满足条件1或条件2的不变运算即可为外提的不变运算。
2.章节大题
感觉bilibili的一个up讲的挺不错的,可以看一下 【致爱意的个人空间-哔哩哔哩】
第一章:绪论
第二章:前后文无关文法和语音
2.1根据字母表求符号串
2.2 构造语言的文法
2.3句子的最左、最右推导和语法树
定义:
2.4文法二义性问题
白话:
2.5短语,直接短语,句柄,素短语
概念
eg:
eg2:
2.6化简文法
概念
eg:
2.7消除左递归
7.8消除回溯
第三章 词法分析及词法分析程序
3.1正规式转->NFA
3.2NFA确定化和最小化
一般流程 正规式--->状态图(NFA)--->确定化(正规式的状态转换矩阵,确定终态,初态)--->根据确定化画出未化简的DFA--->最小化--->画出化简后的DFA
状态图--->确定化(正规式的状态转换矩阵,确定终态,初态)--->根据确定化画出未化简的DFA
最小化--->画出化简后的DFA
自己看吧
无笔记
有无笔记
章节小题
第一章:绪论
《编译原理》期末试题(一)
一、是非题(请在括号内,正确的划√,错误的划×)(每个2分,共20分)
1.编译程序是对高级语言程序的解释执行。(× )
1-31.计算机高级语言翻译成低级语言只有解释一种方式。 (×)
1-32.在编译中进行语法检查的目的是为了发现程序中所有错误。 (×)
1-34.甲机上的某编译程序在乙机上能直接使用的必要条件是甲机和乙机的操作系统功能完全相同。 (×)
二、选择题(请在前括号内选择最确切的一项作为答案划一个勾,多划按错论)(每个4分,共40分)
1.构造编译程序应掌握______。
A.( )源程序 B.( ) 目标语言
C.( ) 编译方法 D.( ) 以上三项都是
2. 优化可生成_____的目标代码。
A.( ) 运行时间较短 B.( ) 占用存储空间较小
C.( ) 运行时间短但占用内存空间大D.( ) 运行时间短且占用存储空间小
3.下列______优化方法不是针对循环优化进行的。
A. ( ) 强度削弱 B.( ) 删除归纳变量
C.( ) 删除多余运算 D.( ) 代码外提
4.编译程序前三个阶段完成的工作是
A.词法分析、语法分析和代码优化
B.代码生成、代码优化和词法分析
C.词法分析、语法分析、语义分析和中间代码生成
D.词法分析、语法分析和代码优化
5.常用的中间代码形式不含
A.三元式 B.四元式 C.逆波兰式 D.语法树
6.代码优化的目的是
A.节省时间 B.节省空间
C.节省时间和空间 D.把编译程序进行等价交换
7.代码生成阶段的主要任务是
A.把高级语言翻译成汇编语言
B.把高级语言翻译成机器语言
C.把中间代码变换成依赖具体机器的目标代码
D.把汇编语言翻译成机器语言
8. 编译程序是对(C)。
A、机器语言的执行 B、汇编语言的翻译
C、高级语言的翻译 D、高级语言程序的解释执行
9. 用高级语言编写的程序经编译后产生的程序叫(B)
A.源程序 B.目标程序 C.连接程序 D.解释程序
10(C)不是编译程序的组成部分。
A.词法分析程序 B.代码生成程序 C.设备管理程序 D.语法分析程序
11.通常一个编译程序中,不仅包含词法分析,语法分析,中间代码生成,代码优化,目标代码生成等五个部分,还应包括 C 。
A.模拟执行器 B.解释器 C.表格处理和出错处理 D.符号执行器
12.编译程序绝大多数时间花在(D)上。
A.出错处理 B.词法分析 C.目标代码生成D.表格管理
13.源程序是句子的集合,(B)可以较好地反映句子的结构。
A. 线性表 B. 树 C. 完全图 D. 堆栈
14.编译程序是一种(B)
A. 汇编程序 B. 翻译程序 C. 解释程序 D. 目标程序
15.编译过程中,语法分析器的任务是(A)
① 分析单词的构成
② 分析单词串如何构成语句
③ 分析语句是如何构成程序
④ 分析程序的结构
A. ②③ B. ④ C. ①②③④ D. ②③④
编译过程中,语法分析器的任务就是 b .
(1) 分析单词是怎样构成的 (2) 分析单词串是如何构成语句和说明的
(3) 分析语句和说明是如何构成程序的 (4) 分析程序的结构
a. (2)(3) b. (2)(3)(4) c. (1)(2)(3) d.(1)(2)(3)(4)
16.在使用高级语言编程时,首先可通过编译程序发现源程序的全部和部分(A)错误。
A. 语法 B. 语义 C. 语用 D. 运行
17.按逻辑上划分,编译程序第三步工作是(A)
A. 语义分析 B. 词法分析 C. 语法分析 D. 代码生成
18.编译原理各阶段工作都涉及(B)
A.词法分析 B.表格管理 C.语法分析 D.语义分析
19.(A)是一种典型的解释型语言。
A.BASIC B.C C.FORTRAN D.PASCAL
20.把汇编语言程序翻译成机器可执行的目标程序的工作是由(B)完成的。
A. 编译器 B. 汇编器 C. 解释器 D. 预处理器
21、编译程序的语法分析器可以发现源程序中的 。
A.语义错误 B.语法和语义错误
C.错误并校正 D.语法错误
22、请选择 ,汇编程序是将( )翻译成 ( ),编译程序是将( )翻译成 ( )。
(1)汇编语言程序 (2)机器语言程序
(3).高级语言程序 (4)汇编语言程序或机器语言程序
A. (1)、(2)、(3)、(4) B. (2)、(1)、(3)、(4)
C. (1)、(4)、(3)、(2) D. (4)、(2)、(3)、(1)
23、编译程序与具体的机器 a , 与具体的语言 a 。
a. 有关 b.无关
24、使用解释程序时,在程序未执行完的情况下, a 重新执行已执行过的部分.
a. 也能 b.不可能
25、编译程序是一种常用的 b 软件.
a. 应用 b. 系统
26、编写一个计算机高级语言的源程序后,到正式上机运行之前,一般要经过 b 这几步.
(1) 编辑 (2) 编译 (3) 连接 (4) 运行
a. (1)(2)(3)(4) b. (1)(2)(3) c. (1)(3) d.(1)(4)
1-11.程序语言的语言处理程序是一种 (1)a . (2)b 是两类程序语言处理程序,他们的主要区别在于 (3)d .
(1) a.系统软件 b.应用软件 c.实时系统 d.分布式系统
(2) a.高级语言程序和低级语言程序 b.解释程序和编译程序
c.编译程序和操作系统 d.系统程序和应用程序
(3) a.单用户与多用户的差别 b.对用户程序的查错能力
c.机器执行效率 d.是否生成目标代码
1-13.下面关于解释程序的描述正确的是 b .
(1) 解释程序的特点是处理程序时不产生目标代码
(2) 解释程序适用于COBOL 和 FORTRAN 语言
(3) 解释程序是为打开编译程序技术的僵局而开发的
a. (1)(2) b. (1) c. (1)(2)(3) d.(2)(3)
1-14.高级语言的语言处理程序分为解释程序和编译程序两种.编译程序有五个阶段,而解释程序通常缺少 (1)e 和 (1)b .其中, (1)e 的目的是使最后阶段产生的目标代码更为高效.
与编译系统相比,解释系统 (2)d .解释程序处理语言时,大多数采用的是 (3)b 方法. (4)a 就是一种典型的解释型语言.
(1): a. 中间代码生成 b.目标代码生成 c.词法分析 d.语法分析 e.代码优化
(2): a.比较简单,可移植性好,执行速度快
b.比较复杂,可移植性好,执行速度快
c.比较简单,可移植性差,执行速度慢
d.比较简单,可移植性好,执行速度慢
(3): a.源程序命令被逐个直接解释执行 b.先将源程序转化为之间代码,再解释执行
c.先将源程序解释转化为目标程序,在执行 d.以上方法都可以
(4) : a. BASIC b. C c. FORTRAN d. PASCAL
1-15.用高级语言编写的程序经编译后产生的程序叫 b .用不同语言编写的程序产生 b 后,可用 g 连接在一起生成机器可执行的程序.在机器中真正执行的是 e .
a. 源程序 b. 目标程序 c. 函数 d. 过程
e. 机器指令代码 f. 模块 g. 连接程序 h.程序库
1-16.要在某一台机器上为某种语言构造一个编译程序,必须掌握下述三方面的内容: c , d , f .
a. 汇编语言 b. 高级语言 c. 源语言 d. 目标语言
e. 程序设计方法 f. 编译方法 g. 测试方法 h. 机器语言
1-17.由于受到具体机器主存容量的限制,编译程序几个不同阶段的工作往往被组合成 (1)d ,
诸阶段的工作往往是 (2)d 进行的.
(1) a. 过程 b. 程序 c. 批量 d.遍
(2) a. 顺序 b. 并行 c. 成批 d.穿插
1-22
1-23.编译程序必须完成的工作有 a .
(1) 词法分析 (2) 语法分析 (3) 语义分析
(4) 代码生成 (5) 之间代码生成 (6) 代码优化
a. (1)(2)(3)(4) b. (1)(2)(3)(4)(5) c. (1)(2)(3)(4)(5)(6)
d. (1)(2)(3)(4)(6) e. (1)(2)(3)(5)(6)
1-24.“用高级语言书写的源程序都必须通过编译,产生目标代码后才能投入运行”这种说法 a .
a. 不正确 b.正确
1-25.把汇编语言程序翻译成机器可执行的目标程序的工作是由 b 完成的.
a. 编译器 b. 汇编器 c. 解释器 d. 预处理器
1-26.编译程序生成的目标程序 b 是机器语言的程序.
a. 一定 b. 不一定
1-27.编译程序生成的目标程序 b 是可执行的程序.
a. 一定 b. 不一定
1-28.编译程序是一种 B 。
A. 汇编程序 B. 翻译程序 C. 解释程序 D. 目标程序
1-29.按逻辑上划分,编译程序第二步工作是 C 。
A. 语义分析 B. 词法分析 C. 语法分析 D. 代码优化
1-30.
三、填空题(每空1分,共10分)
1.计算机执行用高级语言编写的程序主要有两种途径:___解释__和__编译___。
2.编译过程可分为 ( 词法分析) ,(语法分析),(语义分析与中间代码生成 ),(优化)和(目标代码生成 )五个阶段。
2.2型文法又称为(上下文无关)文法;3型文法又称为(正则 )文法。
3.编译程序首先要识别出源程序中每个(单词),然后再分析每个(句子)并翻译其意义。
4.通常把编译过程分为分析前端与综合后端两大阶段。词法、语法和语义分析是对源程序的(分析),中间代码生成、代码优化与目标代码的生成则是对源程序的(综合)。
5.对编译程序而言,输入数据是(源程序),输出结果是(目标程序)。
1-01.编译程序的工作过程一般可以划分为 词法分析,语法分析,语义分析,之间代码生成,代码优化 等几个基本阶段,同时还会伴有 表格处理 和 出错处理 .
1-02.若源程序是用高级语言编写的,目标程序是 机器语言程序或汇编程序 ,则其翻译程序称为编译程序.
1-03.编译方式与解释方式的根本区别在于 是否生成目标代码 .
1-04.翻译程序是这样一种程序,它能够将 用甲语言书写的程序 转换成与其等价的 用乙语言书写的程序 .
1-06.如果编译程序生成的目标程序是机器代码程序,则源程序的执行分为两大阶段:编译阶段 和 运行阶段 .如果编译程序生成的目标程序是汇编语言程序,则源程序的执行分为三个阶段: 编译阶段 ,汇编阶段 和 运行阶段 .
1-07.若源程序是用高级语言编写的,目标程序是机器语言程序或汇编程序 ,则其翻译程序称为 编译程序 。
1-08.一个典型的编译程序中,不仅包括词法分析、语法分析、中间代码生成、代码优化、目标代码生成等五个部分,还应包括表格处理和出错处理。其中,词法分析器用于识别 单词 。
四、简答题(20分)
1. 简述编译程序的工作过程。(10)
编译程序的工作过程,是指从输入源程序开始到输出目标程序为止的整个过程,是非常复杂的,就其过程而言,一般可以划分为五个工作阶段:①词法分析,对构成源程序的字符串进行扫描和分解,识别出一个个的单词;②语法分析,根据语言的语法规则,把单词符号串分解成各类语法单位;③语义分析与中间代码产生,即对各类语法单位,分析其汉一并进行初步翻译;④代码优化,以期产生更高效的代码;⑤目标代码生成,把中间代码变换成特定机器上的低级语言指令形式。
2.编译程序和高级语言有什么区别?
用汇编语言或高级语言编写的程序,必须先送入计算机,经过转换成用机器
语言表示的目标程序(这个过程即编译),才能由计算机执行。执行转换过程
的程序叫编译程序。汇编程序是指没有编译过的汇编语言源文件。编译程序转
换过的叫目标程序,也就是机器语言。
编译程序的工作情况有三种:汇编型、解释型和编译型。汇编型编译程序用来
将汇编语言编写的程序,按照一一对应的关系,转换成用机器语言表示的程序。
解释型编译程序将高级语言程序的一个语句,先解释成为一组机器语言的指令,
然后立即执行,执行完了,取下一组语句解释和执行,如此继续到完成一个程序
止。用解释型编译程序,执行速度很慢,但可以进行人和计算机的"对话",随时
可以修改高级语言的程序。BASIC语言就是解释型高级语言。编译型编译程序将
级语言编写的程序,一次就会部翻译成机器语言表示的程序,而且过程进行很快,
在过程中,不能进行人机对话修改。FORTRAN语言就是编译型高级语言。
3.编译程序的工作分为那几个阶段?
词法分析、语法分析和语义分析是对源程序进行的分析(称为编译程序的前端),
而中间代码生成、代码优化和代码生成三个阶段合称为对源程序进行综合(称为
编译程序的后端),它们从源程序的中间表示建立起和源程序等价的目标程序。
1-35. 扫描遍____指编译程序对源程序或中间代码程序从头到尾扫描一次。
5.编译过程一般分为几个阶段?各阶段的输入输出分别为什么?
第二章:前后文无关文法和语音
一、是非题(请在括号内,正确的划√,错误的划×)(每个2分,共20分)
1.一个有限状态自动机中,有且仅有一个唯一的终态。(×)
2.一个上下文无关文法的开始符,可以是终结符或非终结符。 ( × )
3.已经证明文法的二义性是可判定的。 ( × )
3.2型文法一定是3型文法。 ( × )
4.一个句型一定句子。 ( × )
5.正规文法产生的语言都可以用上下文无关文法来描述。 (√)
6.3型文法一定是2型文法。 (√)
7.如果一个文法存在某个句子对应两棵不同的语法树,则文法是二义性的。 (√)
2-15.正则文法其产生式为Aàa,AàBb, A,B∈VN,a、b∈VT。 (√)
二、选择题(请在前括号内选择最确切的一项作为答案划一个勾,多划按错论)(每个4分,共40分)
1.文法G:S→xSx|y所识别的语言是_____。
A.( ) xyx B.( ) (xyx)* C.( ) xnyxn(n≥0) D.( ) x*yx*
2.如果文法G是无二义的,则它的任何句子α_____。
A.( )最左推导和最右推导对应的语法树必定相同
B.( ) 最左推导和最右推导对应的语法树可能不同
C.( ) 最左推导和最右推导必定相同
D.( )可能存在两个不同的最左推导,但它们对应的语法树相同
3.语言是
A.句子的集合 B.产生式的集合
C.符号串的集合 D.句型的集合
4.下推自动机识别的语言是
A.0型语言 B.1型语言
C.2型语言 D.3型语言
5.对应Chomsky四种文法的四种语言之间的关系是
A.L0ÌL1ÌL2ÌL3 B.L3ÌL2ÌL1ÌL0
C.L3=L2ÌL1ÌL0 D.L0ÌL1ÌL2=L3
6.____型文法也称为正规文法。
[A] 0 [B] 1 [C]2 [D] 3
7.文法E→E+E|E*E|i的句子i*i+i*i的不同语法分析树的总数为______。
[A]1 [B]3 [C]5 [D]7
8.文法:G:S→xSx | y所识别的语言是(D)。
A、xyx B、(xyx)* C、x*yx* D、xnyxn (n≥0)
1.文法G产生的(D)的全体是该文法描述的语言。
A.句型 B. 终结符集 C. 非终结符集 D.句子
2.若文法G定义的语言是无限集,则文法必然是(A)
A.递归的 B. 上下文无关的 C. 二义性的 D. 无二义性的
3.描述一个语言的文法是(B)
A.唯一的 B. 不唯一的 C. 可能唯一
4.一个文法所描述的语言是(A)
A.唯一的 B. 不唯一的 C. 可能唯一
5.一个上下文无关文法G包括四个组成部分,它们是一组非终结符号,一组终结符号,一个开始符号,以及一组(B)
A. 句子 B. 产生式 C. 单词 D. 句型
6.若一个文法是递归的,则它所产生的语言的句子(A)。
A.是无穷多个 B.是有穷多个 C.是可枚举的 D.个数是常量
7.文法E→E+E|E*E|i的句子i*i+i*i有(C)棵不同的语法树。
A. 1 B. 3 C. 5 D.7
8.文法 S→aaS|abc 定义的语言是(C)。
A.{a2kbc|k>0} B.{akbc|k>0} C.{a2k-1bc|k>0} D.{akakbc|k>0}
9.就文法的描述能力来说,有(C)
A.SLR(1) ⊂ LR(0) B.LR(1) ⊂ LR(0) C.SLR(1) ⊂ LR(1) D.无二义文法 ⊂ LR(1)
10. 已知文法G是无二义的,则对G的任意句型α(A)
A.最左推导和最右推导对应的语法树必定相同
B.最左推导和最右推导对应的语法树可能相同
C.最左推导和最右推导必定相同
D.可能存在两个不同的最左推导,但他们对应的语法树相同
11. 文法G[A]:A→ε A→aB B→Ab B→a是(B)
A 正规文法 B 二型文法
12. 给定文法A→bA | ca,为该文法句子的是(C)
A. bba B. cab C. bca D. cba
13. 设有文法G[S]:S®S1|S0|Sa|Sc|a|b|c,下列符号串中是该文法的句子有(D)
A. ab0 B. a0c01 C. a0b0a D. bc10
14. 给定文法A→bA|cc,则符号串①cc ②bcbc ③bcbcc ④bccbcc ⑤bbbcc中,是该文法句子的是(D)
A. ① B. ③④⑤ C. ②④ D. ①⑤
2-07.文法G所描述的语言是 C 的集合。
A.文法G的字母表V中所有符号组成的符号串
B.文法G的字母表V的闭包V*中的所有符号串
C.由文法的开始符号推出的所有终极符串
D.由文法的开始符号推出的所有符号串
2-08.乔姆斯基(Chomsky)把文法分为四种类型,即0型、1型、2型、3型。其中3型文法是 B 。
A.短语文法 B.正则文法 C.上下文有关文法 D.上下文无关文法
2-09.文法G[N]=({b},{N,B},N,{N→b│bB,B→bN}),该文法所描述的语言是
C 。
A. L(G[N])={bi│i≥0} B. L(G[N])={b2i│i≥0}
C. L(G[N])={b2i+1│i≥0} D. L(G[N])={b2i+1│i≥1}
2-10.一个句型中的最左 B 称为该句型的句柄。
可选项有:
A.短语 B.简单短语 C.素短语 D.终结符号
2-11.设G是一个给定的文法,S是文法的开始符号,如果Sx(其中x∈V*),则称x是文法G的一个 B 。
A. 候选式 B.句型 C. 单词 D. 产生式
2-12.一个上下文无关文法G包括四个组成部分,它们是:一组非终结符号,一组终结符号,一个开始符号,以及一组 D 。
A. 句子 B.句型 C. 单词 D. 产生式
2-13.文法G[E]:
E→T∣E+T
T→F∣T﹡F
F→a∣(E)
该文法句型E+F﹡(E+T)的简单短语是下列符号串中的 B 。
①(E+T) ②E+T ③F ④ F﹡(E+T)
可选项有:
A) ①和③ B) ②和③ C) ③和④ D) ③
2-14.若一个文法是递归的,则它所产生的语言的句子 A 。
A.是无穷多个 B.是有穷多个 C.是可枚举的 D.个数是常量
三、填空题(每空1分,共10分)
1.如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是( 二义性)。
2.从功能上说,程序语言的语句大体可分为( 执行性 )语句和(说明性 )语句两大类。
3.一张转换图只包含有限个状态,其中有一个被认为是(初)态;而且实际上至少要有一个(终 )态。
4.对于文法G,仅含终结符号的句型称为 ( 句子 )。
5.2型文法又称为(上下文无关)文法;3型文法又称为(正则 )文法。
6.对于文法G1和G2,若有L(G1)=L(G2)(或G1和G2的语言相同),则称文法G1和G2是等价的。
7.所谓最右推导是指: 任何一步αÞβ都是对α中最右非终结符进行替换的 。
8.一个上下文无关文法所含四个组成部分是 一组终结符号、一组非终结符号、一个开始符号、一组产生式 。
9.产生式是用于定义 语法成分 的一种书写规则。
10.设G[S]是给定文法,则由文法G所定义的语言L(G)可描述为:L(G)={x│Sx,x∈VT*} 。
11.设G是一个给定的文法,S是文法的开始符号,如果Sx(其中x∈V*),则称x是文法的一个句型 。
12.设G是一个给定的文法,S是文法的开始符号,如果Sx(其中x∈VT*),则称x是文法的一个句子。
三、名词解释题:
1.二义性文法------如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是二义性文法。
2.最左推导------任何一步α=>β都是对α中的最右非终结符替换。
3.语法------一组规则,用它可形成和产生一组合式的程序。
4.文法------描述语言的语法结构的形式规则。
5.基本块------指程序中一顺序执行的语句序列,其中只有一个入口和一个出口,入口就是其中的第一个语句,出口就是其中的最后一个语句。
6.语法树
句子的树结构表示法称为语法树(语法分析树或语法推导树)。
给定文法G=(VN,VT,P,S),对于G的任何句型都能构造与之关联的
语法树。这棵树具有下列特征:
(1)根节点的标记是开始符号S。
(2)每个节点的标记都是V中的一个符号。
(3)若一棵子树的根节点为A,且其所有直接子孙的标记从左向右的排列
次序为A1A2…AR,那么A®A1A2…AR一定是P中的一条产生式。
(4)若一标记为A的节点至少有一个除它以外的子孙,则AVN。
(5)若树的所有叶节点上的标记从左到右排列为字符串w,则w是文法G
的句型;若w中仅含终结符号,则w为文法G所产生的句子。
7.语言和文法
文法就是语言结构的定义和描述,是有穷非空的产生式集合。
文法G定义为四元组的形式:
G=(VN,VT,P,S)
其中:VN是非空有穷集合,称为非终结符号集合;VT是非空有穷集合,
称为终结符号集合;P是产生式的集合(非空);S是开始符号(或识别符号)。
这里,VN∩VT=Æ,SVN。V=VN∪VT,称为文法G的字母表,它是出现
文法产生式中的一切符号的集合。
文法G所描述的语言用L(G)表示,它由文法G所产生的全部句子组成,即
L(G)={x| SÞ*x,其中S为文法开始符号,且 }
简单的说,文法描述的语言是该文法一切句子的集合。
8.什么是句子? 什么是语言?
答:设G是一个给定的文法,S是文法的开始符号,如果Sx(其中x∈VT*),则称x是文法的一个句子。
设G[S]是给定文法,则由文法G所定义的语言L(G)可描述为: L(G)={x│Sx,x∈VT*} 。
9.已知文法G[E]为:
E→T|E+T|E-T
T→F|T*F|T/F
F→(E)|i
① 该文法的开始符号(识别符号)是什么?
②请给出该文法的终结符号集合VT和非终结符号集合VN。
③ 找出句型T+T*F+i的所有短语、简单短语和句柄。
解:① 该文法的开始符号(识别符号)是E。
②该文法的终结符号集合VT={+、-、*、/、(、)、i}。
非终结符号集合VN={E、T、F}。
③句型T+T*F+I的短语为i、T*F、第一个T、T+T*F+i;
简单短语为i、T*F、第一个T;句柄为第一个T。
10.已知文法G[S]为:
S→dAB
A→aA|a
B→Bb|ε
① G[S]产生的语言是什么?
② G[S]能否改写为等价的正规文法?
解:① G[S]产生的语言是L(G[S])={danbm│n≥1,m≥0}。
② G[S]能改写为等价的正规文法,其改写后的等价的正规文法G[Sˊ]为:
Sˊ→dA
A →aA|aB|a
B →bB|b
11.设有语言L(G)={adaR | a∈(a,b)*,aR 为a之逆},试构造产生此语言的上下文无关文法G。
解:根据题义,可知aR 为a之逆的含义就是句子中的符号a、b以d为中心呈左右对称出现;由于a∈(a,b)*,所以a、b的个数可以为零。所以可构造产生此语言的上下文无关文法G[S]为:S→aSa|bSb|d
四、简答题(20分)
1. 已知文法 G[S] 为 S → aSb|Sb|b ,试证明文法 G[S] 为二义文法。
证明:
由文法G[S]:S→aSb|Sb|b,对句子aabbbb对应的两棵语法树为:
因此,文法G[S]为二义文法。
2.写一个文法G, 使其语言为 不以0开头的偶数集。
解:1.所求文法是G[S]:
S→AB |B A0
A→AD |C
B→2 |4 |6 |8
C→1 |3 |5 |7 |9 |B
D→0 |C
3.文法G(S)
S→dAB
A→aA| a
B→Bb| ε
描述的语言是什么?
解:L(G)={danbm |n>0, m≥0}
4. 证明文法G(S)
S→SaS| ε
是二义性的。
解:证明:
因为文法G[S]存在句子aa有两个不同的最左推导,所以文法G[S]是是二义性的。
S=>SaS=>SaSaS=>aSaS=>aaS=>aa
S=>SaS=>aS=>aSaS=>aaS=>aa
5. 写一个文法G, 使其语言为 L(G)={albmclanbn| l>=0, m>=1, n>=2}
解:所求文法是G[S]:
S→AB
A→aAc | D
D→bD | b
B→aBb | aabb
6. 写一个文法G, 使其语言为 L(G)={abncn| n≥0}
解:文法G[S]:
S→aB | a
B→bc |bBc
7.证明文法G(A)
A→AA | (A)| ε
是二义性的。
解:证明:
因为文法G[S]存在句子 () 有两个不同的最左推导,所以文法G[S]是是二义性的。
A=>AA=>(A)A=>()A=>()
A=>AA=>A=>(A)=>()
8.写一个文法G, 使其语言为 L(G)={anbncm| n>0为奇数, m>0为偶数}
解:
所求文法是G[S]:
S→AC
A→aaAbb | ab
C→ccC | cc
9.对于下面C语言文件s.c
某编译器编译时报错如下:
s.c: In function ‘f1’:
s.c:3: warning: declaration of ‘x’ shadows a parameter
请回答,对函数f2为什么没有类似的警告错误。
解:对于函数f1,局部变量x声明的作用域是整个函数体,导致在函数体中不可能访问形式参数x。由于这是一个合法的C语言函数,因此编译器给出警告错误。
对于函数f2,由于局部变量x的作用域只是函数体的一部分,不会出现上述问题,因而编译器不报错。
9.给出下面语言的相应文法:
L1={an bn | n≥1} L2={anbm+nam | n≥1,m≥0}
10.证明下述文法G:
S®aSbS|aS|d
是二义性文法。
解:
一个文法,如果存在某个句子有不只一棵语法分析树与之对应,那么称这个
文法是二义性文法。
句子aadbd有两棵语法树。如下图:
由此可知,S®aSbS|aS|d定义的文法是二义性文法。
12. 文法G:S → 1S0 | A
A → 0A1 | ε
简答题 3、设有文法G[S]: S→S(S)S|ε,该文法是否为二义文法?说明理由。 答:是二义的,因为对于()()可以构造两棵不同的语法树。
11. 写一个文法使其语言为L(G)={ anbmambn | m,n≥1}。(6分)
答:文法G(S):
S ® aSb | B
B ® bBa | ba
11. 写一个文法,使其语言是:
L = { 1n0m1m0n | m,n≥0 }
其他题(答案不一样对)
选择
文法G: S→xSx|y所识别的语言是(xnyxn(n>=0))
词法分析器用于识别(单词)
通常一个编译程序中,不仅包含词法分析,语法分析,中间代码生成,代码优化,目标代码生成等五个部分,还应包括(表格处理和出错处理)
(不存在)这样些语言它们的确定的有穷自动机识别,但不能用正则表达式表示
已知文法G【S】:S→A1, A→A1【S0】0。与G等价的正规式是(0(1|10)*1)
词法分析器不能(发现括号不匹配)
乔姆斯其(Chomsky)把文法分为四种类型,即0型、1型、2型、 3型。其中3型文法是(正则文法)
把汇编语言程序翻译成机器可执行的目标程序的工作是由(汇编器)完成的
文法E→E+E【E*E】的句子i*i+i*i有(5)棵不同的语法树。
扫描器所完成的任务是从字符串形式的源程序中识别出一个个具有独立含义的最小语法单位即(单词)
文法S→aaSlabc定义的语言是((a2k-1bc|k>-0))
编译程序的三个阶段完成的工作是(词法分析、语法分析和代码优化)
一个上下文无关文法G包括四个组成部分,它们是组非终结符号,组终结符号,一个开始符号,以及一组(产生式)
词法分析器的输出结果是(单词的种别编码和自身值)
构造编译程序应掌握 (以上三种都是)
代码生成阶段的主要任务是(把中间代码变换成依赖具体机端的目标代码)
对应Chomsky四种文法的四种语言之间的关系是(L3∈L2∈L1∈L0)
识别上下文无关语言的自动机是(下推自动机)
若一个文法是递归的,则它所产生的语言的句子(是无穷多个)
代码优化的目的是(节省时间和空间)
判断
一个上下文无关文法的开始符,可以是终结符或非终结符。
错
在编译中进行语法检查的目的是为了发现程序中所有错误。
错
编译程序是对高级语言程序的解释执行。
错
计算机高级语言翻译成低级语言只有一种解释方式。
错
正规文法产生的语言都可以用上下文无关文法来描述。
对
每个文法都能改写为LL(1)文法
错
计算机高级语言翻译成低级语言只有解释1种方式。
错
正则文法其产生式为A->a. A->Bb AB∈VN,a,b∈VT
对
递归下降法允许任一非终极符是直接左递归的。
对
并不是每个文法都能改写成L(1)文法。
对
填空
扫描器的任务是从源程序中识别出 1个个单词符号
如果1个文法存在某个句子对应两棵不同的语法树,则称这个文法是二义性文法
若源程序是用高级语言编写的,目标程序是机器语言程序或汇编程序,则其翻译程序称为编译程序
编译程序的工作过程般可以划分为词法分析语法分析,语义分析,中间代码生成,代码优化等几个基本阶段同时还会伴有表格管理和出错处理
对于文法G:仅含终结符号的句型称为句子
计算机执行用高级语言编写的程序主要有两种途径:解释和编译
对于文法G1和G2.若L(G1)= L(G2)(或G1和G2的语言相同)则称文法G1和G2是等价的
1张转换图只包含有限个状态,其中有一个被认为是初态而且实际上至少要有一个终态
2型文法又称为上下文无关文法。3型文法又称为正则文法
编译过程可分为词法分析,语法分析,中间代码生成,代码优化和目标代码生成5个阶现
扫描器是词法分析器,它接受输入的源程序,对源程序进行词法分析并识别出一个个单词符号,其输出结果是单词符号,供语法分析器使用
编译程序首先要识别出源程序中每个单词然后再分析每个句子并翻译其意义
编译方式与解释方式的根本区别在于生成目标代码
对编译程序而言,输入数据是源程序,输出结果是目标程序
仅为自己复习整理。有错误请见谅,可评论,鄙人更正!