A、汇编语言模块 B、可重定位目标模块 C、可执行目标模块 D、中间代码 70、如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是 二义的 。
71、一个名字的属性包括 继承属性 和 综合属性 。 72、正规式的“*”读作 星闭包 。
73、编译程序在逻辑上由 、 、语义分析、中间代码生成、代码优化和目标代码生成六部分组成。
74、编译程序的各个阶段的工作都涉及到 符号表管理 和 错误处理 75、文法用来描述语言的语法结构,它由如下4个部分组成:文法终结符集合、文法非终结符集合、 D 和文法开始符号。
A、单词集合 B、字母数字串
C、文法句子集合 D、文法产生式的集合
76、确定的有穷自动机是一个 元组,通常表示为 。 77、已知文法G[E]:
E→E + T | T T→T * F | F F→(E)| id
该文法终结符集合VT= , 文法非终结符集合VN= ,该文法在乔姆斯基(Chomsky)文法分类属于 2 文法。
78、编译程序的各个阶段的工作都涉及到 和 。 79、假设G是一个文法,S是文法开始符号,如果S?*>x,则称x是该文法的一 。
80、如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是 。 81、优化时,节省一条指令MOV Ri,M,节省的指令代价为 C
A、0 B、1 C、2 D、3
82、采用 LL(1) 语法分析时,必须消除文法的左递归。
83、在状态转换图中,结点代表 状态 ,用圆圈表示。
84、若源程序是高级语言编写的,目标程序是 机器语言或汇编 语言的程序,则相应的翻译程序称为编译程序。
85、常用的两种动态存贮分配办法是 栈式 分配和 堆式 分配。
86、翻译方案和语法制导定义不同的是它的 语义动作 (而不叫语义规则)放在括号{ }内,并且可以插在产生式 右部 的任何地方
87、如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是 。
88、所谓最左推导是指: 。
89、上下文无关文法的可以用 四元组 表示,其形式为 G=(VN,VT,S,P) 。
90、后缀式 ab+c+d*e- 所表达的式子为 (a+b+c)*d-e 。
91、常用的两种动态存贮分配办法是 分配和 分配。
92、LL(K)文法中,第一个L表示 从左到右扫描输入串 ,第二个L表示 产生最左推导 ,K表示 在决定语法分析器每步动作时向前看K
个输入符 。
93、一个上下文无关文法所含四个组成部分是 文法终结符集合 文法非终结符集合 开始符号 产生式有限集合 。
94、对于文法G,仅含终结符号的句型称为 句子 。 95、设有文法G[E]: E→E + T | E – T | T T→T * F | T/F | F F→(E)| i
该文法句型E + T * F 的句柄是 T * F 。
96、后缀式 ab+c+d*e- 所表达的式子为 。
97、文法符号的属性有两种,一种称为 继承 属性,另一种称为 综合 属性,S属性定义是指仅使用 综合 属性的语法制导定义。
98、LR(0)项目和LR(1)项目的区别在于 是否有搜索符 。
99、紧跟在条件转移语句后面的语句是基本块的 入口 语句。
100、若二个正规式所表示的 DFA(或正规集) 相同,则认为二者是等价的。
101、仅含终结符的句型称为 。
( F )
103、规范归约和规范推导是互逆的两个过程。 ( T )
104、一个上下文无关文法的开始符号可以是终结符或非终结符。 ( F )
102、编译方式与解析程序的根本区别在于是否生成目标代码。
105、逆波兰表示法表示表达式时无需使用括号。 ( T )
106、符号表由词法分析程序建立,由语法分析程序使用。 ( F )
107、逆波兰法表示的表达式亦称前缀式。 ( F )
108、代码生成器的输入包括中间代码和符号表中的信息。 ( T )
109、孤立地考虑一个基本块常常不能确定一个赋值是否真是无用的。 ( T )
110、目标代码生成时,应考虑如何充分利用计算机的寄存器的问题。 ( T )
111、无左递归的文法是LL(1)文法。 ( F )
112、一个句型的直接短语语是唯一的。 ( F )
113、正规文法产生的语言都可以用上下文无关文法来描述。 (F )
114、对任何一个编译程序来说,产生中间代码是不可缺少的一部分。 ( F )
115、一张转换图只包含有限个状态,其中有一个被认为是初态,最多只有一个终态。( F )
116、一个上下文无关文法的开始符号可以是终结符或非终结符。 ( F )
117、一个文法所有句子的集合构成该文法定义的语言。 ( T )
118、优化实质上是对代码进行等价变换,变换后的代码结构不同但运行结果相同。 ( T )
119、算符优先分析法是一种规范归约分析法。 ( F )
120、非终结符可以有综合属性,但不能有继承属性。 ( F )
121、所有LR分析器的总控程序都是一样的,只是分析表各有不同。 ( T )
122、因名字都是用标识符表示的,故名字与标识符没有区别 (F )
123、空符号串的集合{ε}={}=?。 ( F )
124、非终结符可以有综合属性,但不能有继承属性。 ( F )
125、终结符可以有综合属性,也可以有继承属性。 ( F )
126、一张转换图只包含有限个状态,其中有一个被认为是初态,最多只有一个终态。( )
127、若一个句型中出现了某一产生式的右部,则此右部一定是该句型的句柄。 ( F )
129、DAG是一个可带环路的有向图。 ( F )
130、设有符号串x和y,把y的符号写在x的符号之后所得的符号串,叫做x与y的连接,记为xy。 ( T ) 131、对任何一个编译程序来说,产生中间代码是不可缺少的一部分。 ( F ) 132、对任何正规表达式e,都存在一个DFA M,满足L(M)=L(e)。 ( T)
133、 运行时的DISPLAY表的内容是什么?它的作用是什么?
答:内容:1、过程R的现行活动记录的地址(sp的现值)2、R的外层Q的最新活动记录的地址3、Q的外层即主程序P的活动记录的地址 作用:跟踪每个外层的最新活动记录的位置
134、何谓局部优化、循环优化和全局优化?优化工作在编译的哪个阶段进行?
答:局部优化:在基本快内的优化。循环优化:对循环中的代码进行优化。全局优化:整个程序范围内的优化。 在 中间代码优化阶段。
135、常见的存储分配策略有几种?它们都适合于什么性质的语言?
答:1、静态分配策略 适用于无动态申请内存、无可变体积数组、无递归调用的程序语言( 如 Fortran) 2、动态分配策略 2.1栈式动态分配 2.1.1简单栈式分配 适用于没有分程序结构、不允许程序嵌套定义但允许过程递归调用、允许过程含可变数组的语言 2.1.2嵌套过程语言的栈式分配 适用于没有分程序结构、允许程序嵌套定义和过程递归调用、允许过程含可变数组的语言 2.2堆式动态分配 适用于允许程序为变量在运行时动态申请和释放存储空间的语言
136、下面文法是否是二义文法?试说明理由。 G[S]: S → SaS | ? 答:二义
137、已知文法G(E) E→T|E+T T→F|T * F F→(E)|i
(1) 给出句型(T * F+i)的最右推导及画出语法树; (2) 给出句型(T * F+i)的短语、素短语。 1)E→E+T→E+i→T+i→T*F+I 树略 2)短语:T*F+i T*F i 素短语:T*F i
138、把算术表达式-(a+b)*(b+c)翻译成:
(a) 后缀表示 ab+bc+*@ (b) 语法树 图略 (c) 有向无环图 图略 (d) 四元式三地址代码 四地址代码: (+, a ,b,t1) (+,b,c,t2) (*,t1,t2,t3) (@,t3,-,t4)
139、DFA与NFA的区别?
答:1、DFA弧上不允许有ε出现,NFA允许 2、DFA中每个状态S和输入符号a最多有一条边离开S,NFA有多条 3、NFA可以有多个初态,DFA只有一个
140、设已构造出文法G(S): S?S(S) S??
的LR分析表如下
状态 0 1 2 3 4 5 6 7 ACTION ( r2 S2 r2 S4 r2 r1 S4 r1 ) r2 S5 r2 S7 r1 # r2 Acc r1 GOTO S 1 3 6 假定输入串为( )( ),请给出LR分析过程(即状态,符号,输入串的变化过程)。
步骤 状态 符号 输入串 步骤 1 2 3 4 5 6 7 8 9 10
141、对符号表的基本操作有几种,分别是什么?
答:5类。1、填写名称2、查找名字3、访问信息4、填写修改信息5、删除 (或者:4类。建立、插入、查找、删除)
142、给定代码段如下,求出按四种不同方式进行参数传递后,变量a的值 …
procedure P(w,x,y,z); begin
y := y*w; z := z+x; end begin
a := 5; b := 3; P(a+b,a-b,a,a); write(a); end
状态 0 01 012 0123 01235 01 012 0123 01235 01 符号 S S( S( S() S S( S(S S(S) S 输入串 ()()$ ()()$ )()$ )()$ ()$ ()$ )$ )$ $ $