当前位置: 首页 > news >正文

【编译原理】期末

单选题 (4分)

令文法G[E]为:E->E+T | T     

                       T->T*F | F

                        F-> (E) | i

句型 F*i+T 的最左素短语是( )

A.F

B.i

C.T

D.F*i

B

短语:

F*i+T、F*i、F、i

素短语:

i

最左素短语:

i

单选题 (4分)

若在C语言程序中出现“aa 11 bb=123;”,且不出现在引号和注释里,在编译时会

A.语法分析时报错

B.语义分析时报错

C.生成中间代码时报错

D.语法分析时报错

D

单选题 (4分)

活动记录中静态链的作用是(  )

A.用以实现对非局部名字的访问

B.用来指向静态数据区

C.表明过程的嵌套层次

D.建立本过程和主调过程间的联系

A


嵌套过程语言的程序,内层过程引用非局部量可通过(B )跟踪外层过程最新活动记录的位置

A 老SP B 静态链C Previous链 D 全局display


静态链的作用是(A)

A.存放过程的直接外层过程最新活动记录的地址,用以访问局部数据

B.存放主调过程最新活动记录的地址,用以建立主被调的联系

C.存放代码的返回地址,用以返回主调程序

D.存放静态数据区的地址,用以访问静态数据

表达式(A + B) * (- C - D) 的逆波兰式是:

A.ABCD+*--

B.AB+CD--*

C.AB+C-D-*

D.AB+-CD-*

C

如果某种程序设计语言设计的程序,其所需数据空间的总量在编译时是完全确定了的,则最好采用以下哪种存储分配策略

A.堆式分配策略

B.栈式分配策略

C.静态分配策略

D.以上都有

C

下面哪种不是自底向上的语法分析文法(  )。

A.LR(1)

B.SLR(1)

C.LL(K)

D.算符优先法

C

若一个文法是递归的,则它产生的句子个数是()

A.无穷个

B.可能有限个,可能无穷个

C.有限个

A

以下关于DFA描述错误的是(   )

A.初态唯一

B.终态唯一

C.转态转换函数是单值映射

D.不含标记有空串的转换弧

B

下面关于编译方式与解释方式描述有误的是(  )

A.编译方式是先翻译后执行

B.解释方式是边翻译边执行

C.在解释方式下,程序运行时解释器掌握控制权

D.解释方式优于编译方式

D

令文法G[E]为:E->E+T| T

         T->T*F| F

         F->(E) | i

E+F*(T+i)文法G的一个规范句型,指出这个规范句型的句柄是(   )

A.i

B.T

C.T+i

D.F

D

LR分析器的核心部分是一张分析表,这张表包括(  )

A.预测分析表、转态转换表

B.优先关系矩阵、动作表

C.动作表、状态转换表

D.内情向量表、符号表

C

局部优化是在什么范围内进行的优化?

A.过程体

B.函数体

C.基本块

D.循环体

C

如果文法无二义性,则与规范归约互为逆过程的是(  )

A.最右归约

B.最左归约

C.规范推到

D.最左推导

C

在C语言中,不同过程中的变量名可以相同,这些相同的变量名在符号表中存入同一符号表入口。

递归文法的语言是无穷集,程序设计语言的文法通常是递归的

中间代码优化的目的是生成更有效的目标代码,为了追求高效的目标代码,优化应不计代价。

“遍”是对源程序或源程序的中间结果从头到尾扫描一次,并做有关加工处理,生成新的中间结果或目标程序。一个编译程序所分遍数越多越好。

只能用机器语言编写编译程序

过程的活动指该过程的一次执行,在任一时刻,一个过程只可能有一个活动活跃着。( )

如果文法中的某个句型,存在不同的推导序列,则该文法就是二义性文法

反例:存在非二义性文法,其某些 句型 有多个推导序列,但所有 句子 只有一个推导树。

S → A b | B c
A → a
B → a

  • 句型 S 的推导序列

    • 序列 1:S ⇒ A b

    • 序列 2:S ⇒ B c

    • 句型 S 有两个不同的推导序列。

  • 句子分析

    • 句子 a b 的唯一推导:S ⇒ A b ⇒ a b

    • 句子 a c 的唯一推导:S ⇒ B c ⇒ a c

    • 所有句子(如 a ba c)都只有唯一语法树,因此文法 非二义性


句型和句子

句子:仅含终结符的句型

二义性文法的正确定义

  • 一个文法是二义性的,当且仅当存在 至少一个句子(即终结符串),该句子对应:

    • 两个或更多不同的 最左推导(或等价地,两个或更多不同的 最右推导),或

    • 两个或更多不同的 语法树

  • 关键点:二义性必须针对 句子(终结符串) 定义,而不是针对一般的句型(可能包含非终结符)。

现有文法G[S]: S—>a |b | (T)

                          T —>S T’

                          T’->*ST’|ɛ

则FOLLOW(S)为:( )

A.{#}

B.{#,)}

C.{#,*,)}

D.{*,)}

C

FIRST(S)={a,b,(}

FIRST(T)=FIRST(S)={a,b,(}

FIRST(T')={*,\varepsilon}

FOLLOW(S)={#}\cup FIRST(T')-\varepsilon \cup FOLLOW(T)={#,*,)}

FOLLOW(T)={)}

FOLLOW(T')=FOLLOW(T)={)}

非终结符FOLLOW 集关键步骤说明
S{#,∗,)}

1. 开始符号加入 #  [1]
2. T→ST′加入 *   [3] FIRST(T')-\varepsilon


3.  T→ST′,T′⇒∗ε 时加入 FOLLOW(T)={)} [4]

T{)}S→(T) 直接加入 )  [2]
T′{)}

T→ST′ 末尾加入 FOLLOW(T)={)}   [4]

T’推导出 ε 时,产生式T→ST’等价于T→S(即T’“隐身”)。此时,ST中的位置相当于直接处于T的末尾,因此S后面的符号(即FOLLOW(T))会直接成为T’后面的符号。
换句话说,T’作为可空后缀,其后面的符号本质上就是T后面的符号,因此FOLLOW(T')FOLLOW(T)相同。

空符号串在语法分析中对后继符号集的传递作用

间接三元式表示法的特点为(  )。

A.采用间接码表,便于优化处理

B.节省存储空间,不便于表的修改

C.便于优化处理,浪费存储空间

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

A

四元式(Quadruples)

  • 结构:包含四个字段 (运算符, 运算对象1, 运算对象2, 结果)
  • 特点
    • 每个四元式独立存储运算信息,便于代码优化(如删除无用代码、重新安排计算顺序)。
    • 需要显式存储临时变量(结果字段),可能导致存储空间浪费。
  • 对应选项
    C. 便于优化处理,浪费存储空间

三元式(Triples)

  • 结构:通过运算对象的位置(编号)引用操作数,不单独存储临时变量,而是通过 “对三元式的引用” 表示中间结果。
  • 特点
    • 无需显式存储临时变量,节省存储空间。
    • 若需调整计算顺序(如优化时),可能需要大量修改三元式编号的引用,不便于优化。
  • 对应选项
    D. 节省存储空间,不便于优化处理

间接三元式(Indirect Triples)

  • 结构:在三元式基础上增加一个 “执行顺序表”(间接码表),通过该表记录三元式的执行顺序,而非直接修改三元式本身。
  • 特点
    • 优化时只需调整间接码表,无需修改三元式,便于优化处理。
    • 需额外维护间接码表,增加了实现复杂度。
  • 对应选项
    A. 采用间接码表,便于优化处理

正规表达式与正规文法是不同的形式化描述工具,它们之间不存在等价性。

不是所有句型都有规范推导

面向人类语言的特点是程序执行效率低,编制效率低,可读性差

http://www.lryc.cn/news/576705.html

相关文章:

  • 华为云Flexus+DeepSeek征文|利用华为云一键部署的Dify平台构建高效智能电商客服系统实战
  • Youtube双塔模型
  • C++共享型智能指针std::shared_ptr使用介绍
  • cocos creator 3.8 - 精品源码 - 挪车超人(挪车消消乐)
  • Neo4j无法建立到 localhost:7474 服务器的连接出现404错误
  • Linux基本命令篇 —— less命令
  • springboot+Vue驾校管理系统
  • matplotlib 绘制水平柱状图
  • 基于LQR控制器的六自由度四旋翼无人机模型simulink建模与仿真
  • 使用deepseek制作“喝什么奶茶”随机抽签小网页
  • 我的世界模组开发进阶教程——机械动力的数据生成(2)
  • 【C++进阶】--- 继承
  • 基于WOA鲸鱼优化算法的圆柱体容器最大体积优化设计matlab仿真
  • 人大金仓数据库jdbc连接jar包kingbase8-8.6.0.jar驱动包最新版下载(不需要积分)
  • C++泛型编程2 - 类模板
  • C# 委托(为委托添加方法和从委托移除方法)
  • 13-StringBuilder类的使用
  • Linux内核网络协议栈深度解析:面向连接的INET套接字实现
  • 8. 【Vue实战--孢子记账--Web 版开发】-- 账户账本管理
  • Uni-App 小程序面试题高频问答汇总
  • 【Docker基础】Docker容器管理:docker top及其参数详解
  • Ubuntu 主机通过 `enp4s0` 向开发板共享网络的完整步骤
  • Flutter基础(控制器)
  • 广外计算机网络期末复习
  • 大模型之提示词工程入门——解锁与AI高效沟通的“钥匙”
  • WOE值:风险建模中的“证据权重”量化术——从似然比理论到FICO评分卡实践
  • python学习打卡day57
  • Python基础(吃洋葱小游戏)
  • 如何让ChatGPT模仿人类写作,降低AIGC率?
  • SpringBoot3.x整合Knife4j接口文档