哈工大软件学院2013秋编译原理部分回顾

本文深入探讨了编程语言的基础概念,包括文法、编译过程、词法分析、语法分析、语义分析以及LL(1)和LR(1)文法分析,同时涵盖了中间代码生成、动态存储分配等关键内容。文章还详细介绍了如何将给定文法转换为LL(1)和LR(1)形式,并构建分析表。最后,通过实际代码示例展示了中间代码的翻译和优化过程。

------感谢某学长的辛勤劳动,我整理一下并附上答案发到博客上

一、选择

1.     文法G:S->xSx | y所识别的语言:

a. xyx  b. (xyx)*        c. x^nyx^n(n>=0)        d.x*yx*

2. 由文法的开始符经0步或者多步推到产生的文法符号序列是:

a. 短语  b.句柄       c. 句型 d. 句子

3. 规范规约指:

a. 最左推导的逆过程 b. 最右推导的逆过程

c.规范推导               d. 最左归约的逆过程

4. 词法分析器的输出结果是:

a.单词的种别编码    b. 单词在符号表的位置    

c. 单词的种别编码和自身值     d. 单词自身值

5. 正规式M1和M2等价是指:

a. M1和M2的状态数相等       b. M1和M2的有向弧数相等

c. M1M2所识别的语言集相等    d. M1和M2状态数和有向弧相等

二、填空

1. 编译过程的5个阶段分别是:词法分析,语法分析,语义分析与中间代码生产,代码优化,目标代码生成

2. 文法中的终结符和非终结符的交集是  空集  。词法分析交给语法分析器的文法符号是 终结符  ,它一定出现在产生式的  右部 

3. 采用  自顶向下   语法分析时,必须消除文法的左递归。

4. 自下而上分析法采用 移入 、规约、错误处理、  接收  等四种操作。

5. Chomsky把文法分为 4 种类型,编译器构造中采用  2  文法和  3  文法,它们分别产生上下文无关   语言和  正则   语言,并分别用   不确定的下推   自动机和      有穷  自动机识别所产生的语言。

6. 常用的两种动态存储分配办法是  栈式  动态分配和  堆式  动态分配。

三、简答:

1. 什么是L-属性定义?

答: 一个语法制导定义SDDL-属性定义,如果∀AX1X2…Xn∈P,其每一个语义规则中的每一个属性要么是一个综合属性,要么是Xj(1j n)的一个承属性,这个继承属性仅依赖于下列属性:

  •  产生式中Xj的左边符号X1,X2,…Xj-1的属性;
  •  A继承属性。

2.     什么是活动?什么事活动记录?活动记录主要由哪些构成?

答: 过程体的每次执行称为该过程的一个活动

        过程每执行一次,就为它分配一块连续存储区,用来管理过程一次执行所需的信息,这块连续存储区称为活动记录(Activation record)

        这些活动记录在函数调用过程中生成

        活动记录由:实参,临时数据,返回值,控制链,访问链,保存的机器状态,局部数据组成。

下面的题难度不大,很常规,而且不方便写,我就不写答案了~

四:给定文法G[s]:S->(L)|aS|a,

                               L->L,S|S

将G[s]改造成LL(1)文法,并给出LL(1)分析表。

(1)     消除左递归和回溯。

(2)     计算各非终结符的First集和Follow集以及候选式的Select集

(3)     构造预测分析表

五:给定文法G[s]:S->Aa|dAb|Bb|dBa

                               A->c

                              B->c

(1)     构造识别文法G[s]活前缀的LK(1)项目的DFA

(2)     构造LR(1)分析表

六、翻译成中间代码:

       while a>b do if a>0 thena:=a-1 else a:=a+1

七、B:=3

       D:=A+C

       E:=A*C

       F:=E+D

       G:=B*F

       H:=A+C

       I:=A*C

       J:=H+1

       K:=B*5

       L:=K+J

       M:=L

构造DAG,根据DAG重建优化后的四元式序列(假设变量G、L、M在基本块出口之后活跃)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值