第一题、填空题
- 综合属性用于自下而上传递信息,继承属性自上而下传递信息。终结符只有综合属性,它由词法分析器提供
- 编译过程中词法分析器是从源程序中识别出一个个单词符号
- 设G是一个给定的文法,S是文法的开始符号,如果S推导出x(其中x∈(Vn∪Vt)*),则称x是文法的一个句型
- 在自底向上的分析方法中,LR方法每次归约当前句型的句柄。
- 在自顶向下的分析方法中,LL方法每次操作的对象是输入串的当前输入符号。
- 通常用 上下文无关文法(2型文法)来描述程序语言的语法。
- 若小写字母表示终结符,大写字母表示非终结符,则A→·aB 称为移进项目,则A→a·B 称为待约项目,A→aB· 称为规约项目,S`→aB·称为接受项目。
- 高级程序设计语言的翻译主要有两种方式:编译和解释,二者的根本区别在于是否生成目标代码。
- 语言的层次结构由文法规定
- 一个编译程序中,不仅包含词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等五个部分,还应包括表格处理和出错处理。其中中间代码生成和代码优化部分不是每个编译程序都必需的。
- 文法G所描述的语言是由文法的开始符号推出的所有终结符串的集合
- 同心项目集的合并可能产生新的规约-规约冲突,而不会是移进-规约冲突
- 在语法分析中,自顶向下分析试图为输入符号串构造一个最左推导。
- 已知文法G[S]: S→AA A →Aa︱a 不是LL(1) 文法的理由是FIRST(Aa)∩FIRST(a)≠Φ
- 表格管理和出错处理是编译程序各阶段都涉及到的工作
- 在编译器的工作过程中,实现语言关键字大小写不敏感的阶段是词法分析 ,分析语言结构的阶段是语法分析。
- 推导的过程可以用一棵树来表示,被称为分析树。
- Lex和Yacc是用于生成 词法分析器 和 语法分析器 的工具。(注意是器)
- 在编译器设计中,在生成源代码之前,通常在内部采用一种不依赖目标机的结构的代码标识原代码,这种代码被称为 中间代码。
- 字母表Σ,用Σ* 表示Σ 上所有有穷长的串集合,Σ* 称为Σ的 闭包
- 不确定有限自动机中的有限是指 状态的数量 是有限的。
- 识别3型文法描述语言的自动机是 有穷自动机 。
- 有穷自动机接受的语言是 正规语言。
- 在自上而下的语法分析中,需要消除左递归以 避免产生死循环,需要提取左因子以 避免虚假匹配。
- 在自上而下的语法分析中,应该先消除文法的 直接左递归 , 再消除文法的 间接左递归。
- 规范规约是最 左 规约,规范(正规)推导为最 右 推导
- S-属性文法是只含有综合属性的属性文法
- S-属性文法的翻译器通常可借助LR分析器实现
- S-属性文法扩充LR分析器的分析栈,存放三类信息:分析状态、文法符号 及 文法符号对应的语义值
- L-属性文法可用于 按深度优先顺序 计算属性值
- 简单算术表达式:仅含 简单变量 或 常数 的算术表达式
- 简单变量:具有 简单数据类型 的变量,不含数组元素及结构引用等复合型数据结构
- 语法分析 是在词法分析的基础上将单词序列分解成各类语法短语,如程序,语句和表达式等
- 语法分析所依据的是语言的 语法规则
- 语义分析-----审查有无语义错误-----收集类型信息
- 中间代码设计的原则:容易生成和容易将它们翻译成 目标代码
- 代码优化的目的:对中间代码进行变换和改造,是生成的目标代码更高效,即省时间和省空间
- 文法描述的语言是 该文法一切句子的集合
- 0型文法(短语文法)是最基本的,产生式左边至少含有一个非终结符;1型文法(上下文有关文法):除空产生式外,产生式右边长度大于左边;2型文法(上下文无关文法):产生式左边都是非终结符;3型文法(正规文法/正则文法):产生式右边最多含有一个非终结符,要么在最左边,要么在最右边。高级文法是低级文法的特里尔,因此高级文法描述的语言也可以由低级文法来描述。
- 描述上下文无关文法句型推导的直观工具----- 语法树(推导树)
- 在推导的过程,都是对最左边的非终结符进行推导,称为 最左推导 。
- 最右推导称为规范推导,由规范推导得出的句型称为 规范句型 。
- 一个句型存在两棵不同的语法树,则该文法是 二义的
- 如果描述上下文无关语言的每一个文法都是二义的,则称为该语言是 先天二义的。
- 短语:由根(树枝根)产生的叶子组成的字符串。
- 简单短语(直接短语):直接一步推导出的叶子组成的字符串
- 句柄:最左直接推导
- 正规式,也叫 正规表达式,用来表示正规集的工具。
- ‘*’、‘.’、‘|’都是 左连接 的
- 正规表达式用来表示字符串的结构
- 如果R和S是Σ上的正规式,表示的正规集分别为L®和L(S)
- 有穷自动机 都能而且仅能识别 正规集
- DFA:Md = (S,Σ , f, s0, Z),其中:S为有穷状态集,Σ为输入符号集,f为转换函数,s0为唯一的初态,Z为终态集
- DFA M接受的 字符串的全体 称作M接受的语言
- NFA:Md = (S,Σ , f, Q, Z),其中:S为有穷状态集,Σ为输入符号集,f为转换函数,Q为的初态集,Z为终态集。
- DFA 是 NFA 的特例。
- 若源程序是用高级语言编写的,目标程序是 机器语言程序或汇编语言程序,则其翻译程序称为编译程序。
- 对编译程序而言,输入数据是 源程序,输出结果是 目标程序 。
- 如果编译程序生成的目标程序是机器代码程序,则源程序的执行分为两大阶段: 编译阶段 和 运行阶段 。
- 编译是对 高级语言的翻译 。
- 把汇编语言程序翻译成机器可执行的目标程序的工作是由 汇编器 完成的。
- 用高级语言编写的程序经编译后产生的程序叫 目标程序 .
- 设备管理程序 不是编译程序的组成部分。
- 编译程序是一种 翻译程序 。
- 按逻辑上划分,编译程序第一步工作是 词法分析
- 编译程序中语法分析器接收以 单词 为单位的输入。
- 编译程序绝大多数时间花在 表格管理 。
- 一个上下文无关文法所含四个组成部分是 一组终结符号 、一组非终结符号 、 一个开始符号 、 一组产生式 。
- 产生式是用于定义 语法成分 的一种书写规则
- 扫描器的任务是从源程序中识别出一个个 单词符号 。
- 语法分析最常用的两类方法是 自顶而下 和 自底而上 分析法。
- 递归下降法不允许任一非终结符是直接 左 递归的。
- 递归下降分析法是 自顶向下 分析方法
- 自顶向下的语法分析方法的基本思想是:从文法的 开始符号 开始,根据给定的输入串并按照文法的产生式一步一步的向下进行直接推导,试图推导出文法的 句子 ,使之与给定的输入串匹配。
- 自底向上的语法分析方法的基本思想是:从给定的终结符串开始,根据文法的规则一步一步的向上进行 直接归约 ,试图 归约 到文法的 开始符号。
- 在 LR(0) 分析法的名称中,L的含义是 自左向右的扫描输入串 ,R的含义是 最左归约 ,0 的含义是 向右查看0个字符就决定用哪个产生式进行推导
- 可通过编译程序发现源程序的全部 语法 错误和部分 语义 错误。
- 从功能上说,程序语言的语句大体可分为 执行性 语句和 说明性 语句两大类。
- 语法分析是依据语言的 语法 规则进行的,中间代码产生是依据语言的 语义 规则进行的。
- 语法分析器的输入是 单词符号 ,其输出是 语法单位 。
- 逆波兰式 ab+c+ d*e- 所表达的表达式为 (a+b+c)*d-e
- 自上而下分析法采用 移进 、归约、错误处理、接受 等四种操作。
- 一个LR分析器包括部分:一个 总控程序 和一张 分析表 (和分析栈)。
- 语法分析基于 上下文无关 文法进行,即识别的是该类文法的 句子。语法分析的有效工具是 语法树 。
- 语义分析阶段所生成的与源程序等价的中间表示形式可以有 逆波兰 、四元式表示 与 三元式表示 等
- 自顶向下语法分析会遇到的主要问题有 左递归 和 回溯 。
- 四元式之间的联系是通过 临时变量 实现的。
- 在规范归约中,用 句柄 来刻画可归约串。
- 在目标代码生成阶段,符号表用于 地址分配
- 在LR分析法中,分析栈中存放的状态是识别规范句型 活前缀 的DFA状态。
- 两个正规集相等的必要条件是他们对应的 正规式 等价。
- 构造LR分析器的任务就是产生 LR分析表
- 递归下降法 不允许 任一非终结符是直接左递归的。
- 递归下降分析法是自顶向下分析方法。
- 0型文法相应的语言称为0型语言或称 递归可枚举集 ,它的识别系统是 图灵(Turing)机 。
- 1型文法相应的语言称为1型语言或 上下文有关语言 ,它的识别系统是 线性界限自动机 。
- 自然语言的语法应属于上下文有关文法。
- 2型文法相应的语言称为2型语言或上下文无关语言,它的识别系统是 下推自动机。
- 程序设计语言的语法是 上下文无关 的。
- A —>a或A -->aB为 右线性文法,A —>a或A -->Ba为 左线性文法,都为正规文法。
- 相应的语言为3型语言或正规语言,识别系统是有限自动机。
- 只含有单层分枝的子树称为 简单子树。
- 活前缀不超过 最右句柄的右端
- 三元式通过 三元式编号 引用中间结果.
- 在自底向上的语法分析方法中,分析的关键是 寻找句柄.
- 使用 语义规则 可以定义一个程序的意义。
第二题、选择题
-
如果一个文法满足( ),则称该文法是二义文法
① 文法的某一个句子存在两棵(包括两棵)以上的分析树
② 文法中存在某个句子,它有两个(包括两个)以上的最右(最左)推导
③ 文法中存在某个句子,它有两个(包括两个)以上的最右(最左)归约
④ 在进行归约时,文法的某些规范句型的句柄不唯 -
构造编译程序应掌握( 源程序、目标语言、 编译方法)
-
将编译程序分成若干“遍”,是为了( 使程序的结构更为清晰 )。
-
编译过程中,语法分析器的任务就是(分析单词串是如何构成程序的)
-
语法分析器则可以发现源程序中的( D )。
A.语义错误 B.语法和语义错误 C.错误并校正 D.语法错误 -
解释程序处理语言时 , 大多数采用的是(B)方法
A.源程序命令被逐个直接解释执行
B.先将源程序转化为中间代码 , 再解释执行
C.先将源程序解释转化为目标程序 , 再执行
D.以上方法都可以 -
在自顶向下的语法分析方法中,分析的关键是(D)。
A.寻找句柄 B.寻找句型 C.消除递归 D.选择候选式 -
若文法 G 定义的语言是无限集,则文法必然是(A)。
A.递归的 B.前后文无关的 C.二义性的 D.无二义性的 -
一个文法所描述的语言是(A)。
A.唯一的 B.不唯一的 C.可能唯一,好可能不唯一 D.都不对 -
文法分为四种类型,即0型、1型、2型、3型。其中0型文法是(A)。
A.短语文法 B.正规文法 C.上下文有关文法 D.上下文无关文法 -
与编译系统相比,解释系统(D)。
A.比较简单 , 可移植性好 , 执行速度快 B.比较复杂 , 可移植性好 , 执行速度快
C.比较简单 , 可移植性差 , 执行速度慢 D.比较简单 , 可移植性好 , 执行速度慢 -
编写一个计算机高级语言的源程序后,到正式上机运行之前,一般要经过(B)这几步:
(1) 编辑 (2) 编译 (3) 连接 (4) 运行
A.(1)(2)(3)(4) B.(1)(2)(3) C.(1)(3) D.(1)(4) -
词法分析器的输出结果是(C)。
A.单词的种别编码 B.单词在符号表中的位置
C.单词的种别编码和自身值 D.单词自身值 -
正规式M1和M2 等价是指(C)。
A.M1和M2的状态数相等 B.M1和M2的有向边条数相等
C.M1和M2所识别的语言集相等 D.M1和M2状态数和有向边条数相等 -
如果文法G是无二义的,则它的任何句子α (A)。
A.最左推导和最右推导对应的语法树必定相同
B.最左推导和最右推导对应的语法树可能不同
C.最左推导和最右推导必定相同
D.可能存在两个不同的最左推导,但它们对应的语法树相同 -
构造编译程序应掌握(D)。
A.源程序 B.目标语言 C.编译方法 D.以上三项都是 -
间接三元式表示法的优点为(A)
A.采用间接码表,便于优化处理 B.节省存储空间,不便于表的修改
C.便于优化处理,节省存储空间 D.节省存储空间,不便于优化处理 -
下面关于解释程序的描述正确的是 B 。
(1) 解释程序的特点是处理程序时不产生目标代码
(2) 解释程序适用于COBOL 和 FORTRAN 语言
(3) 解释程序是为打开编译程序技术的僵局而开发的
A. (1)(2) B. (1) C. (1)(2)(3) D.(2)(3) -
用不同语言编写的程序产生___后,可用___连接在一起生成机器可执行的程序.在机器中真正执行的是___. 上面三空格对应的选项是:A
a. 源程序 b. 目标程序 c. 函数 d. 过程
e. 机器指令代码 f. 模块 g. 连接程序 h.程序库
A. b、g、e B. b、c、e C. e、g、f D. e、c、f -
由于受到具体机器主存容量的限制,编译程序几个不同阶段的工作往往被组合成___,诸阶段的工作往往是___进行的. 上面两空格对应的选项是: A
a. 过程 b. 程序 c. 批量 d.遍
e. 顺序 f. 并行 g. 成批 h.穿插
A. d和h B. d和e C. a和h D. a和e -
编译过程中,语法分析器的任务就是 B .
(1)分析单词是怎样构成的 (2) 分析单词串是如何构成语句和说明的
(3)分析语句和说明是如何构成程序的 (4) 分析程序的结构
A. (2)(3) B. (2)(3)(4) C. (1)(2)(3) D.(1)(2)(3)(4) -
编译程序必须完成的工作有 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) -
若一个文法是递归的,则它所产生的语言的句子 A
A.是无穷多个 B.是有穷多个 C.是可枚举的 D.个数是常量 -
文法的二义性和语言的二义性是两个 A 的概念。
A 不同 B 相同 C 无法判断 D 不存在 -
A 是一种典型的解释型语言。
A.BASIC B.C C.FORTRAN D.PASCAL -
在编译过程中,如果遇到错误应该(C)
A. 把错误理解成局部的错误
B. 对错误在局部范围内进行纠正,继续向下分析
C. 当发现错误时,跳过错误所在的语法单位继续分析下去
D. 当发现错误时立即停止编译,待用户改正错误后再继续编译 -
在自底向上的语法分析方法中,分析的关键是(A )。
A. 寻找句柄
B. 寻找句型
C. 消除递归
D. 选择候选式 -
在自顶向下的语法分析方法中,分析的关键是( D)。
A. 寻找句柄
B. 寻找句型
C. 消除递归
D. 选择候选式
第三题、计算题
第四题、应用题
- LL(1)分析:
输入串aadl的分析过程
附录:
有一位前辈总结的一些题,也比较全,可以练习一下:编译原理习题1
练习习题2:编译原理习题2
编译原理一些知识点1:编译原理知识点1