编译原理期末复习重点

编译原理期末复习纲要

仅供自己观看

一、选判填

  1. 单选:5*1=5'
  2. 判断:5*1'=5'
  3. 填空:5*2'=10'

合计:20'

二、简答题

12选4,4*5'=20'

  1. 什么是编译程序?

    编译程序是现代计算机系统的基本组成部件之一。从功能上看,一个编译程序就是一个语言翻译程序,能够将一种高级语言翻译成目标语言,通目标语言常是汇编语言或者机器语言这样的低级语言。

  2. 编译有哪几个过程?

    词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成共6个过程。

  3. 编译和解释的区别?

    两者主要是工作模式上的区别。编译是将源程序代码转换成目标代码,通常目标代码是汇编代码,然后需要将目标代码进一步转换成计算机能够识别的二进制代码,机器才能运行;解释是直接对源程序一行一行的执行,能直接得到运行结果而不生成目标代码。其次就是两者的运行效率不同,一般而言,编译的程序要比解释的程序效率高。

  4. 什么是文法的二义性?

    一个文法存在某个句子对应两个不同的语法树,或者说一个文法中存在某个句子,它有两个不同的最左(或最右)推导

  5. 什么是有限自动机?

    有限自动机是一种识别装置,能准确地识别 正规集

  6. 简述词法分析器的作用

    • 从字符流的源程序中识别单词
    • 滤掉源程序中注释或空白
    • 记录新读入的字符行的行号
  7. 常见的语法分析方法有哪些?

    常见的有自顶向下分析自底向上分析两种方法。

  8. 简述语法分析器的作用

    确定是否可以以及如何从语法的起始符号推导出输入符号串

    总结起来就是两点:

    • 识别并检查来自词法分析器的单词符号串
    • 构建由输入单词符号串组成的数据结构
  9. 什么是LL(1)文法分析器?

    LL(1)文法分析器是能够判断由词法分析给出的单词符号串是否符合LL(1)文法规则的程序。常用的实现方法由:递归下降表驱动

  10. 什么是LR(0)文法分析器?

    LR(0)文法分析器就是一个由总控程序分析表(或分析函数)和分析栈组成,能够从词法分析器中取得词法单元序列,并且确认该序列是否可由LR(0)文法生成的程序。

    简而言之:能用LR(0)分析表的 分析器 称为LR(0)分析器。

  11. 什么是语法制导翻译?

    书上的说法:是编译程序实现的一种方法,即由语法分析程序的分析过程来主导语义分析以及翻译的过程。

    百度上的说法:语法制导翻译是指一种源语言代码的翻译完全由语法分析器驱动的编译器的实现方法。

  12. 常见的代码优化方法有哪些

    • 窥孔优化
    • 局部优化
    • 循环优化
    • 全局优化

二、大题

4*15'=60'

  • 将NFA确定化和最小化

    细讲如何对NFA进行确定化和最小化

  • LL(1)文法相关问题

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

      细讲如何判断文法是否是LL(1)文法

    2. 构造预测分析表

      Step1:计算出SELECT集合(SELECT集合求解可以参考文章:细讲如何判断文法是否是LL(1)文法

      Step2:画一张预测分析表,行为非终结符,列为终结符

      Step3:通过SELECT集合将相应非终结符的产生式填入相应的终结符的那一列

      例如:存在如下SLECT集合表

      产生式SELECT集合
      E → TE’( , id
      E’ → +TE’+
      E’ → ε#,)
      T → FT’(,id
      T’ → *FT’*
      T’ → ε#,),+
      F → idid
      F → (E)

      预测分析表如下所示:

      id+*()#
      E
      E’
      T
      T’
      F

      E → T E ’ E → TE’ ETE能够得到得到SELECT集合 { ( , i d } \{( , id\} {(,id},故在( 和id下面写入产生式 E → T E ’ E → TE’ ETE,通常为了简化表,产生式左部会省略

      E ’ → + T E ’ E’ → +TE’ E+TE能够得到SELECT集合 + + +,故在+的那一列写入 → + T E ’ → +TE’ +TE,同时 S E L E C T ( E ’ → ε ) = { # , ) } SELECT(E’→ε)=\{\#,)\} SELECT(Eε)={#)},所以要在#和ε这两列写入产生式 → + T E ’ → +TE’ +TE

      ③、④、⑤同理可得

      填完后的预测分析表为:

      id+*()#
      E → T E ’ → TE’ TE → T E ’ → TE’ TE
      E’ → + T E ’ → +TE’ +TE → ε → ε ε → ε → ε ε
      T → F T ′ → FT' FT → F T ′ → FT' FT
      T’ → ε → ε ε → ∗ F T ′ → *FT' FT → ε → ε ε → ε → ε ε
      F → i d → id id → ( E ) → (E) (E)
  • LR分析相关问题

    1. 判断一个文法是SLR(1)还是LR(0)文法

    2. 构造识别活前缀的DFA

    3. 构造文法分析表

  • 18
    点赞
  • 223
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知识汲取者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值