编译原理习题(含答案)——11-14中间代码生成——哈工大陈鄞配套版本

中间代码生成_1



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

A. 语法规则

B. 词法规则

C. 语义规则

D. 等价变换规则

 

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

A. 便于目标代码的优化

B. 便于存储空间的组织

C. 便于编译程序的移植

D. 便于目标代码的移植

 

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

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

字分配一个相对地址

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

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

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

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

 

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

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

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

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

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

 

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

A.

B. 错

 

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

A. 对

B.

 

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

A. 对

B.

 

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

A. 对

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其值为( )

A. 10

B. 34

C. 14

D. 54

 

2 ( )可以把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其值为( )

A. 10

B. 21

C. 14

D. 24

 

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

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

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

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

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

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

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

 

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

A.

B. 错

 

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

A.

B. 错

 

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

A. 对

B.

 

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

A.

B. 错

 

中间代码生成_3


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

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

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

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

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

 

 

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

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

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

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

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

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

 

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

 


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


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

A.

B. 错


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

A.

B. 错


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

A. 对

B.


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

A.

B. 错


 中间代码生成_4


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

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

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

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

 

 

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

A. 赋值语句

B. goto语句

C. 条件语句

D. 循环语句

 

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

A. 指示器

B. 临时变量

C. 符号表

D. 程序变量

 

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

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

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

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

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

 

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

A.

B. 错

 

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

A.

B. 错

 

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

A. 对

B.

 

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

A.

B. 错


  • 22
    点赞
  • 104
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
好的,我会认真回答你的问题。现在我先来解答你的第一个问题: 好的,我明白了。你想问关于WRF-DA模块的编译与安装的问题。那么,我来给你讲一下。 WRF-DA是WRF数据同化系统,它可以将观测资料与数值模型的预报结果相结合,提高模型预报的准确性。WRF-DA的编译与安装与WRF模型的编译与安装类似,只需要在编译WRF模型时加入WRF-DA的相关选项即可。 以下是WRF-DA模块的编译与安装步骤: 1. 下载WRF-DA代码 首先,你需要从官方网站(http://www2.mmm.ucar.edu/wrf/users/download/get_sources_wrfda.html)下载最新版的WRF-DA代码。 2. 解压WRF-DA代码 将下载的WRF-DA代码解压到你想要安装的目录下。 3. 编译WRF-DA 进入WRF-DA代码目录,执行如下命令: ``` ./configure wrfda ``` 该命令会进入WRF-DA的配置界面,你需要按照提示进行配置。配置完成后,执行如下命令进行编译: ``` ./compile_wrfda_serial ``` 如果你想进行并行编译,可以使用如下命令: ``` ./compile_wrfda_parallel ``` 4. 安装WRF-DA 编译完成后,你需要将编译生成的可执行文件和数据文件复制到你想要安装的目录下。然后,将WRF-DA的可执行文件路径添加到系统的PATH环境变量中,以便在任意目录下都可以执行WRF-DA。 好了,以上就是WRF-DA模块的编译与安装步骤。希望对你有帮助!如果你还有其他问题,可以继续问我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花月诗人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值