0
点赞
收藏
分享

微信扫一扫

编译原理-19-考试复习

梦为马 2022-02-27 阅读 82

Exam

1. 正则表达式与自动机

  1. 结合RE,使用Thompson构造法构造等价NFA,状态的合并需要体现出来(比如状态1和状态8),使用0-n进行编号

  1. 使用子集构造法构造等价的DFA:使用A-Z进行编号

s t e p 1 : A = { 0 , 1 , 2 , 4 , 7 } ⇔ ϵ − c l o s u r e ( 0 ) s t e p 2 : B = { 1 , 2 , 3 , 4 , 6 , 7 , 8 } n o t e : A → N F A a { 3 , 8 } → m o v e ϵ − c l o s u r e B . . . step1: A = \{0, 1, 2, 4, 7\} \Leftrightarrow \epsilon-closure(0) \\ step2: B = \{1, 2, 3, 4, 6, 7, 8\} \\ note: A \xrightarrow[NFA]{a} \{3, 8\} \xrightarrow[move]{\epsilon-closure} B \\ ... \\ step1:A={0,1,2,4,7}ϵclosure(0)step2:B={1,2,3,4,6,7,8}note:Aa NFA{3,8}ϵclosure moveB...

  1. 最小化DFA:识别等价状态,使用划分的方法,首先分离终止状态,使用0-n进行编号

s ≁ t ⇔ ∃ a ∈ Σ . ( s → a s ′ ) ∧ ( t → a t ′ ) ∧ ( s ′ ≁ t ′ ) s \not\sim t \Leftrightarrow \exist a \in \Sigma. (s \xrightarrow{a} s')\wedge(t \xrightarrow{a} t') \wedge (s' \not\sim t') staΣ.(sa s)(ta t)(st)

  1. 最小DFA转换为RE:一共做状态数

  1. 别忘了画终止状态标识

2. First、Follow集合与LL(1)文法

  1. 计算First集合

  1. 计算Follow集合:注意开始符号的含义是第一条表达式的左侧元素

  1. 得到文法分析表

t ∈ F i r s t ( α ) ( 1 ) α ⇒ ∗ ϵ ∧ t ∈ F o l l o w ( A ) ( 2 ) \begin{array}{l} t \in First(\alpha) & (1)\\ \alpha \xRightarrow{*} \epsilon \wedge t \in Follow(A) & (2)\\ \end{array} tFirst(α)α ϵtFollow(A)(1)(2)

t t t
A A A A → α A \rightarrow \alpha Aα

  1. 判断是否为LL(1)文法:是否无冲突,检查是否有一个单元格中有超过一个表达式
  2. 得到LL(1)语法分析器的伪代码

3. LR语法分析器

3.1. LR(0)

  1. 增广文法:增加生成式 L ′ → L L' \rightarrow L LL
  2. 使用·来代表栈顶
  3. 非acc的栈顶执行规约操作
  4. 闭包计算

  1. 表中没有冲突项则LR(0)文法是无二义的

3.2. SLR(1)

  1. 规约:$(3) [k:A \rightarrow \alpha·] \in I_i \wedge A \neq S’ \Rightarrow \forall t \in Follow(A) \cup {$}. ACTION[i, t] = rk , 要 规 约 就 是 我 们 发 现 了 完 整 的 右 部 ( ,要规约就是我们发现了完整的右部( (A \rightarrow \alpha , 并 且 当 前 符 号 为 ,并且当前符号为 t$),如果t不在Follow(A)中,那么不可能有一个句型包含t。
  2. 只需要在LR(0)的基础上检查follow集合:检查规约的表达式的具体情况( L → P ⋅ L\rightarrow P· LP)

  1. 规约过程见例题:要仔细注意规约表达式的使用。

3.3. LR(1)

  1. $[A \rightarrow \alpha·\beta, a] (a \in T \cup {$}) , 此 处 , a 是 向 前 看 符 号 , 数 量 为 1 , 使 用 a 来 记 住 ,此处, a是向前看符号, 数量为1,使用a来记住 ,a,1使a\gamma$
  2. 闭包计算(务必注意):注意是在原生成式上的操作,是否执行规约操作和a中的元素有关

3.4. LALR(1)

  1. 将相同的状态进行合并

4. 语法制导的翻译方案

  1. S属性
    1. 节点N上的综合属性只能通过N的子节点或N本身的属性来定义。
    2. 直观上就是要么能被子节点计算得到,要么是自身持有
  2. L属性:继承属性,从父节点或兄弟节点获取到的

5. 中间代码生成

  1. 添加语句的语义规则:注意label、goto和code即可
  2. 为代码片段生成中间代码
  3. 基于布尔表达式与控制流语句回填翻译方法为语句设计回填方案:引入非终结符
  4. 使用回填方案为以下代码片段生成中间代码


举报

相关推荐

0 条评论