跳到正文
HeZzz's Notes
返回

编译技术-2022fa-回忆版

在 Github 上编辑此页

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

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

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

正则表达式转换

写出 {anbncm∣n≥1,m≥0}\{a^n b^n c^m \mid n \geq 1, m \geq 0\} 文法

设有文法

S→ACS \rightarrow A C

A→aAb∣abA \rightarrow a A b \mid a b

C→cC∣εC \rightarrow c C \mid \varepsilon

证明二义性

S→S or S∣S and S∣(S)∣p∣q∣not 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

过程不写了,来不及了。

语法分析树

F→ET+∣TF \rightarrow ET+ \mid T
T→TF∗∣FT \rightarrow TF* \mid F
F→Fp↑PF \rightarrow Fp \uparrow P
P→E∣iP \rightarrow E \mid i

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

题目是错的,下一个。

LL(1)LL(1)

S→AcB∣BdS \rightarrow AcB \mid Bd
A→AaB∣cA \rightarrow AaB \mid c
B→aA∣aB \rightarrow aA \mid a

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

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

需要改造文法:

最终文法:

S→AcB∣BdS \to AcB \mid Bd

A→cA′A \to c A'

A′→aBA′∣εA' \to a B A' \mid \varepsilon

B→aB′B \to a B'

B′→A∣ε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)

S→BBS \rightarrow BB
B→aBB \rightarrow aB
B→bB \rightarrow b

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

DFA

构造增广文法

S′→SS' \rightarrow S

S→BBS \rightarrow BB

B→aBB \rightarrow aB

B→bB \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,

后缀为 LL 或 ll 的整型常量代表类型为long int.

写出整型常量的 NFANFA

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

翻译

S→ListS \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}

list→num\text{list} \rightarrow \text{num}

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

不会,放弃。


在 Github 上编辑此页
分享这篇资料:

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