• 编译原理


    中间代码生成_1

    1 中间代码生成时所依据的是( C )。

    A. 语法规则

    B. 词法规则

    C. 语义规则

    D. 等价变换规则

    2 在编译程序中与中间代码生成无关的是( D)。

    A. 便于目标代码的优化

    B. 便于存储空间的组织

    C. 便于编译程序的移植

    D. 便于目标代码的移植

    3 以下说法不正确的是( D)。

    A. 对于声明语句,语义分析的主要任务就是收集标识符的类型等属性信息,为每一个名

    字分配一个相对地址

    B. 从变量类型可以知道该变量在运行时刻需要的内存数量。在编译时刻,可以使用这些

    数量为每一个名字分配一个相对地址

    C. 名字的类型和相对地址信息保存在相应的符号表条目中

    D. 对声明的处理要构造符号表,但不产生中间代码

    4 以下说法不正确的是(B )。

    A. 类型自身也有结构,用类型表达式来表示这种结构

    B. 基本类型不是类型表达式

    C. 类型名也是类型表达式

    D. 将类型构造符作用于类型表达式可以构成新的类型表达式

    5 数组元素的地址计算与数组的存储方式有关。

    A. 对

    6 在程序中标识符的出现仅为使用性的。

    B. 错

    7 在编译阶段只对可执行语句进行翻译。

    B. 错

    8 在程序中标识符的出现仅为定义性的。

    B. 错

    第12讲 中间代码生成_2

    1 有文法G及其语法制导翻译如下所示( 语义规则中的*和+分别是常规意义下的算术运算符):

    E→E(1) ∧ T {E.val = E(1).val * T.val}

       E→T        {E.val = T.val}

       T→T(1)# n    {T.val = T(1).val + n.val }

       T→ n        {T.val = n.val}

    则分析句子1 ∧ 2 ∧ 3 # 4其值为( C)。

    A. 10

    B. 34

    C. 14

    D. 54

    2 用( C )可以把a:=b+c翻译成四元式序列。

    A. 语法规则

    B. 词法规则

    C. 语义规则

    D. 等价变换规则

    3 有文法G及其语法制导翻译如下所示( 语义规则中的*和+分别是常规意义下的算术运算符):

    E→E(1) ∧ T {E.val = E(1).val * T.val}

       E→T        {E.val = T.val}

       T→T(1)# n    {T.val = T(1).val + n.val }

       T→ n        {T.val = n.val}

     则分析句子2 ∧ 3 # 4其值为( C)。

    A. 10

    B. 21

    C. 14

    D. 24

    4 以下说法不正确的是(D )。

    A. 赋值语句翻译的主要任务是生成对表达式求值的三地址码

    B. 在增量翻译方法中,gen( )函数不仅要构造出一个新的三地址指令,还要将它添加到

    至今为止已生成的指令序列之后

    C. 如果一个赋值语句中涉及到数组元素,那么将该语句翻译成三地址码时要解决的主要

    问题是确定数组元素的存放地址,也就是数组元素的寻址

    D. 数组元素的地址计算与数组的存储方式无关

    5 数组元素的地址由两部分构成,一部分是基地址,另一部分是偏移量。

    A. 对

    6 基地址通过查符号表即可获得。

    A. 对

    7 数组元素的偏移地址的计算只取决于数组的下标。

    B. 错

    8 设计数组引用的SDT的关键问题是:如何将地址计算公式和数组引用的文法关联起来。

    A. 对

    中间代码生成_3

    1 关于布尔表达式的叙述,不正确的是( B)。

    A. 布尔常量是布尔表达式

    B. 布尔常量不是布尔表达式

    C. 关系表达式是布尔表达式

    D. 将括号和逻辑运算符作用于布尔表达式得到一个新的布尔表达式

    2 以下说法不正确的是( B)。

    A. 为布尔表达式和控制流语句生成目标代码时,关键问题之一是确定跳转指令的目标标

    B. 在生成跳转指令时,就可以确定目标标号

    C. 在生成跳转指令时,目标标号还不能确定

    D. 可以将标号的地址作为继承属性传递到生成相关跳转指令的地方,但是这样的做法需

    要再进行一趟处理,将标号和具体地址绑定起来

    3 令非终结符B表示布尔表达式,为B设置两个继承属性true和false。B.true是一个地址,该地址中存放了当B为真时控制流转向的指令的标号;B.false也是一个地址,该地址中存放了当B为假时控制流转向的指令的标号,则下列SDT中正确的是( )。

     

     

    4 令非终结符B表示布尔表达式,为B设置两个继承属性true和false。B.true是一个地址,该地址中存放了当B为真时控制流转向的指令的标号;B.false也是一个地址,该地址中存放了当B为假时控制流转向的指令的标号,则下列SDT中正确的是( )。

     

    5 在分支和循环中会用到条件式,而用作条件式的通常是布尔表达式。

    A. 对

    6 在控制流语句的翻译中,布尔表达式B被翻译成由跳转指令构成的跳转代码。

    A. 对

    7 逻辑运算符&&、|| 和 ! 会出现在代码中。

    B. 错

    8在跳转代码中,逻辑运算符&&、|| 和 ! 被翻译成跳转指令。

    A. 对

     中间代码生成_4

    1 令非终结符B表示布尔表达式。在布尔表达式的回填技术中,为非终结符B设置两个综合属性:

    B.truelist:指向一个包含跳转指令的列表,这些指令最终获得的目标标号就是当B为真时控制流

    应该转向的指令的标号;B.falselist:指向一个包含跳转指令的列表,这些指令最终获得的目标

    标号就是当B为假时控制流应该转向的指令的标号。则下列SDT中正确的是()。

     

    2 在下面的语句中,( A )不需要回填技术。

    A. 赋值语句

    B. goto语句

    C. 条件语句

    D. 循环语句

    3 四元式之间的联系是通过( B )实现的。

    A. 指示器

    B. 临时变量

    C. 符号表

    D. 程序变量

    4 四元式表示法的优点为 (A )。

    A. 不便于优化处理,但便于表的更动

    B. 不便于优化处理,但节省存储空间

    C. 便于优化处理,也便于表的更动

    D. 便于表的更动,也节省存储空间

    5 在回填技术中,生成一个跳转指令时,暂时不指定该跳转指令的目标标号。

    A. 对

    6 在回填技术中,同一个列表list中的跳转指令具有相同的目标标号。

    A. 对

    7 在回填技术中,同一个列表list中的跳转指令可能具有不同的目标标号。

    B. 错

    8 在回填技术中,等到能够确定正确的目标标号时,才去填充指令的目标标号。

    A. 对

    https://me.csdn.net/tomsoft 

    所遇皆星河
  • 相关阅读:
    二、Elasticsearch核心配置文件详解
    javax.mail.AuthenticationFailedException: 535 authentication failed
    Java compiler level does not match the version of the installed java project facet
    一、设置cookie报非法参数异常
    slf4j的使用规范
    基于token的身份验证JWT
    单点登录
    spring的bean不能注入原因分析
    规避空指针异常规范
    Git远程操作详解
  • 原文地址:https://www.cnblogs.com/Shallow-dream/p/12791209.html
Copyright © 2020-2023  润新知