Skip to content
HeZzz
Go back

编译技术-2022fa-回忆版

编译技术 2022 秋季学期的回忆版真题,来源于计算机速通之家 | QQ 群号:468081841

本文连载于编译技术-2022fa-回忆版| HeZzz

🙇‍♂️🙇‍♂️🙇‍♂️时间仓促,有不足之处烦请及时告知。邮箱hez2z@foxmail.com 或者在 速通之家 群里 @9¾

正则表达式转换

写出 {anbncmn1,m0}\{a^n b^n c^m \mid n \geq 1, m \geq 0\} 文法

设有文法

SACS \rightarrow A C

AaAbabA \rightarrow a A b \mid a b

CcCεC \rightarrow c C \mid \varepsilon

证明二义性

SS or SS and S(S)pqnot SS \rightarrow S \text{ or } S \mid S \text{ and } S \mid (S) \mid p \mid q \mid \text{not } S 证明二义性

反例句子:p and q and pp \text{ and } q \text{ and } p

过程不写了,来不及了。

语法分析树

FET+TF \rightarrow ET+ \mid T
TTFFT \rightarrow TF* \mid F
FFpPF \rightarrow Fp \uparrow P
PEiP \rightarrow E \mid i

  1. 推导 ip+ip \uparrow *+ 句型语法分析树
  2. 短语、直接短语、句柄

题目是错的,下一个。

LL(1)LL(1)

SAcBBdS \rightarrow AcB \mid Bd
AAaBcA \rightarrow AaB \mid c
BaAaB \rightarrow aA \mid a

  1. 写出消除回溯后的文法
  2. LL(1)LL(1)分析表,是否为LL(1)LL(1)文法

1. 判断文法是否是LL(1)

需要改造文法:

最终文法:

SAcBBdS \to AcB \mid Bd

AcAA \to c A'

AaBAεA' \to a B A' \mid \varepsilon

BaBB \to a B'

BAεB' \to A \mid \varepsilon

2. First集合与Follow集合

First集合:

Follow集合:

3. LL(1)分析表

非终结符acd$
SS → BdS → AcB
AA → CA’
A’A’ → aBA’A’ → εA’ → εA’ → ε
BB → aB’
B’B’ → εB’ → AB’ → εB’ → ε

该文法是LL(1)文法。

LR(1)

SBBS \rightarrow BB
BaBB \rightarrow aB
BbB \rightarrow b

  1. LR(1)LR(1) DFA
  2. LR(1)LR(1)分析表
  3. 给出句子(不记得了)的分析过程
    格式(步骤 状态栈 符号栈 输入串 动作)

DFA

构造增广文法

SSS' \rightarrow S

SBBS \rightarrow BB

BaBB \rightarrow aB

BbB \rightarrow b

然后状态转移表什么的,太多了,压榨 AI 也没法写了,直接看视频吧。

【编译原理速成之LR(0)和SLR(1)】

四元式

while (a + b < c) do
    if (a > b && b < c) {
        c = c + 1
    } else {
        b = b + 1
    }

写出四元式,(假设序号从100开始)

序号四元式说明
100(ADD, a, b, T1)T1 = a + b
101(LT, T1, c, T2)T2 = T1 < c (while条件)
102(JFALSE, T2, 111)若T2为假(即!(a+b<c)),跳转到111(结束)
103(GT, a, b, T3)T3 = a > b
104(LT, b, c, T4)T4 = b < c
105(AND, T3, T4, T5)T5 = T3 && T4 (if条件)
106(JFALSE, T5, 109)若T5为假,跳转到109(else分支)
107(ADD, c, 1, c)c = c + 1 (then分支)
108(JMP, 110)跳转到110(if-else结束)
109(ADD, b, 1, b)b = b + 1 (else分支)
110(JMP, 100)跳转回100(while条件判断)
111循环结束

NFA 构造

十进制整型常量

八进制整型常量前缀为 00

十六进制整型常量前缀为0x0_x,

后缀为 LLll 的整型常量代表类型为long int.

写出整型常量的 NFANFA

看这个编译技术 -2025fa-lb 复习课/利用正规式描述高级语言中的某个单词结构

翻译

SListS \rightarrow \text{List}

List(op)\text{List} \rightarrow (\text{op})

op op List\text{op } \rightarrow \text{op List}

op List\text{op } \rightarrow \text{List}

listnum\text{list} \rightarrow \text{num}

写一个翻译模式可以输出括号内有n个数
例如 ((123)(123456))((123)(123456)) 输出为 3,6,23,6,2

不会,放弃。


Share this post on:

上一篇
软件工程-2024fa-回忆版
下一篇
编译技术-2024fa-回忆版