编译原理知识点复习重点

  1. 产生式是用于定义语法范畴的一种书写规则。
  2. 程序语言的语句大体分为执行性语句说明性语句两大类。

符号表相关

  1. 符号表中的信息栏中登记了每个名字有关的性质,如类型、种属、所占单元大小、地址等。符号表每一项由名字栏地址分配两个栏目组成。
  2. 符号表的作用是登记源程序中出现的名字及其信息,以及各阶段的进展状况。主要技术有:线性表、对折查找、杂奏技术。
  3. 目标代码生成阶段,符号表是地址分配的依据。
  4. 组织的符号表可以唯一,也可以按符号表不同属性分为几个

语言和文法相关

  1. 正规式M1和M2等价是指M1\M2所识别的语言集相等。语言相同L(G1)=L(G2),则文法G1\G2等价。

  2. 文法是描述语言语法结构的形式规则,G=(Vn,Vt,P,S)。

  3. 文法G描述的语言用L(G)表示,它由文法G所产生的所有句子组成,语言是句子的集合。一个文法描述的语言唯一。文法G所描述的语言是由文法推出的所有终结符串的集合,L(G)={α|S=()>α,α∈Vt}

  4. 语义是定义程序意义的一组规则

  5. 若文法G无二义,它任何句子的最左/右推导对应的语法树必定相同

  6. 若一文法存某句子对应不同的两棵语法树,称该文法为二义性文法

  7. 一个句型的句柄一定是文法某产生式的右部

  8. Chomsky分类法:文法按规则定义的形式进行分类。有穷自动机识别3型语言、下推自动机识别2型语言、线性界限自动机识别1型语言、图灵机识别0型语言。

  9. 正规文法产生的语言都可用上下文无关文法描述,3型文法(正规文法)一定是2型文法(上下文无关文法)。(二型一定是一型、一型一定是零型)

  10. 1型文法又称短语结构文法

编译和解释相关

  1. 高级语言编写的源程序经编译程序转换成机器语言表示的目标程序,才能由计算机执行。
  2. 计算机执行使用高级语言编写的程序主要有两种途径:解释和编译。解释程序和编译程序是两类程序语言处理程序。编译方式和解释方式的根本区别在于是否生成目标代码
  3. 编译过程(指从输入源程序开始到输出目标程序为止的整个过程)可分为词法分析(对源程序字符串扫描分解,识别出单词)、语法分析(根据语法规则把单词符号串分解成各类语法单位)、语义分析和中间代码生成(分析各语法单位含义并初步翻译)、代码优化(产生更高效的代码)、目标代码生成(把中间代码变成特定机器上的低级语言指令形式)五个阶段。
  4. 语义分析的基本功能:确定类型、类型检查、语义处理、某些静态语义检查
  5. 语法分析依据语言的语法规则进行,中间代码生成依据语言的语义规则进行。
  6. 文法的每个产生式都配备了一组属性的计算规则,称为语义规则
  7. 编译程序大多数时间花在表格管理上。可发现源程序的全部语法错误部分语义错误
  8. 编译程序分成若干个“遍“是为了使程序结构更清晰
  9. 中间代码生成和代码优化不是每个编译程序必须的。
  10. 中间代码生成的目的:利于目标代码生成、利于编译程序移植、利于目标代码移植、利于提高目标代码的质量
  11. 词法分析、语法分析、语义分析对源程序进行分析(编译程序前端),中间代码生成、代码优化、代码生成三个阶段是对源程序进行综合(编译程序后端)。
  12. 构造编译程序应掌握源程序、目标语言、编译方法
  13. 解释程序处理程序时不产生目标代码,处理语言时先将源程序转化为中间代码再解释执行。编译程序为一种翻译程序是对高级语言的翻译
  14. 编译程序使用说明标识符的过程函数的静态层次区分标识符的作用域。
  15. 扫描器是词法分析器,他接受输入的源程序,对源程序进行词法分析并识别单词(有独立含义的最小语法单位)符号输出,供语法分析器使用。
  16. 词法分析器的输出结果是单词的种别编码自身值
  17. 词法分析过程中为确定词性需超前搜索若干个字符。
  18. 编译器首先识别出源程序中的每个单词,再分析每个句子并翻译其含义。它完成把汇编语言翻译成机器可执行的目标程序的工作
  19. 语法分析器输入的时单词符号,输出的是语法单位,可发现源程序中的语法错误,任务为分析单词串如何构成语句和说明,语句和说明如何构成程序及分析程序结构
  20. 语义分析过程中,根据每个产生式所对应的语义子程序进行翻译的方法是语法制导翻译
  21. 语法分析方法大致可分为两类:自上而下分析法和自下而上分析法,基于上下文无关文法进行,有效工具是语法树
  22. 自顶向下试图为输入符号串构造一个最左推导,自底向上试图为输入符号串构造一个最右推导
  23. 自上而下分析法采用移进、规约、错误处理、接受四种操作。
  24. 自上而下分析法指从开始符号开始向下直接推导,推出句子。自下而上分析法是从输入串开始逐步直接归约直到开始符号
  25. 递归子程序法、LL(K)分析法、预测分析法是自顶向下的语法分析方法。
  26. 递归下降法不允许任意非终结符是直接左递归的,递归下降分析法是自顶向下分析法
  27. 递归下降分析器由一组递归函数组成,且每个函数对应文法的一个非终结符
  28. 目标代码通常采用三种形式:机器语言、汇编语言、带装配机器语言模块

基本块相关

  1. 局部优化是在基本块范围内进行的一种优化。基本块内的优化:删除多余运算,删除无用赋值。削弱运算强度破坏了临时变量在一基本块内仅被定义一次的特性。
  2. 每个基本块可用一个DAG表示,基本块是程序中一顺序执行的语言序列,仅有一个入口和一个出口。
  3. 基本块的入口语句条件:程序的第一个语句/能由条件转移语句或无条件转移语句转移到的语句/紧跟在条件转移语句后的语句
  4. 仅考虑一个基础块不能确定一个赋值是否无用。
  5. 一张转换图只包含有限个状态其中一个被认为是初态,且至少有一个终态。

中间代码相关

  1. 常见的中间代码形式为三元式、四元式、逆波兰式
  2. 逆波兰表示法表示表达式不用括号
  3. 四元式之间的联系是通过临时变量实现的。
  4. 采用三元式实现三地址代码时,不利于对中间代码优化。
  5. 间接三元式表达法的优点是采用简介码表,便于优化处理

其它

  1. DISPLAY表为过程的嵌套层次显示表。一个过程相应的DISPLAY表的内容为现行活动记录地址所有外层最新活动记录的起始地址。通过DISPLAY表可访问其外层过程的变量。
  2. 每个过程的活动记录的体积在编译时可静态确定

其它

  1. 常用的两种动态存贮分配方法是栈式、堆式动态分配。存储管理方案主要分为静态、动态存储方案。对于数据空间的存贮分配,FORTRAN采用静态策略,PASCAL采用动态策略。堆式动态分配申请和释放存储空间遵守任意原则。
  2. 编译程序工作情况有三种:汇编型、解释型(BASIC)、编译型(FORTRAN)
  3. 一个高级语言源程序编写到正式上机运行前一般经过编辑、编译、连接三步。
  4. 一个名字的属性包括类型和作用域
  5. 常用的参数传递方式:传地址、传值、传名

优化问题

  1. (代码优化的意义)优化可生成运行时间短且占用存储空间小的目标代码
  2. 优化指对程序进行等价变换,使从变化后的程序出发能产生更有效的目标代码。根据优化涉及的程序范围,可将优化分成局部优化、循环优化、全局优化三个级别;根据优化的范围可分为局部优化和全局优化两类。
  3. 基本的优化方法:删除多余运算、代码外提、强度削弱、变换循环控制条件、合并已知量、复写传播、删除无用赋值
  4. 强度削弱、删除归纳变量、代码外提针对循环优化,删除多余运算的优化方法不针对循环优化进行。
  5. 目标代码生成时应考虑如何充分利用计算器的寄存器问题(以减少访问内存次数)。每条指令的执行代价为指令访问主存次数加一。还应着重考虑如何使目标代码较短、充分利用指令系统的特点。
  6. 多处理器的优化与机器有关,合并常量、削减运算强度、消除公共子表达式与机器优化无关。

推导归约相关

  1. 最右推导亦称规范推导,由此得到的句型称规范句型。仅含终结符的句型称句子。
  2. 最右推导的逆过程称为规范归约,又称最左规约归约规范推导是两个互逆的过程。

LL(1)

  1. 并不是每个文法都能改写成LL(1)文法。
  2. LL(1)文法一定无二义。若一文法G预测分析表不含多重定义,该文法为LL(1)文法。
  3. LL(1)文法第一个L代表从左至右扫描输入,第二个L代表最左推导,1代表在决定分析器的每部动作时向前看一个输入符号。LL(1)无公共左因子,非二义、不含左递归。
  4. FIRST/FOLLOW/SELECT都是终结符集

LR分析法

  1. LR(0)分析指从左向右扫描和自底向上的语法分析。分析的每一步只需根据分析栈当前已移进、规约出的符号,向前查看0个输入符号就能确定某一产生式左部符号的句柄是否已在分析栈顶部形成。

  2. LR分析法中,分析栈中存放的状态是识别规范句型活前缀的DFA状态

  3. LR分析器的任务是产生LR分析表。一个LR分析器包括两部分:总控程序、分析表。

  4. LR分析法在自左至右扫描输入串时就能发现错误,但不能准确指出错误地点。

  5. 算符优先文法每次都对最左素短语归约,LR分析提取句柄。规范规约中的可归约串是句柄。自底向上的语法分析方法中,分析的关键是寻找句柄。(一个句型的句柄一定是某产生式右部)

  6. 一个算符优先文法可能不存在算符优先函数与之对应。

  7. 预测分析程序使用一张分析表和一个符号栈联合控制。

  8. SLR(1)分析法中,S含义是简单。

  9. 属性文法中文法符号的两种属性分别称继承属性和综合属性。

  10. 一个属性文法是一个三元组A=(G,V,F),一个上下文无关文法G,一个属性的有穷集V,和关于属性的断言、谓词有穷集F。

  11. S-属性文法只含有综合属性的属性文法。L-属性文法要求对每个产生式A->X1X2…,其每个语义规则中的每个属性or综合属性,orXj的一个继承属性,该属性仅依赖于Xj左边符号X1X2…Xj-1的属性orA的继承属性。S属性文法是L属性文法的特例。

  12. 综合属性是用于自下而上传递信息,继承属性是用于自上而下传递信息。终结符只有综合属性。

  13. 数组的内情向量中肯定不含数组的维数信息。

  14. -a为终结符,A->α·aβ为移进项目。

  15. 算法表达式在语义翻译时不需要回填奇数。

  16. 同心集合并可能会产生的新冲突为归约/归约

  17. 一个项目指明了在分析过程中某时刻能看到产生式的多大一部分。

  18. 采用自上而下分析,必须消除回溯,确定的自上而下分析必须不含左递归、二义性和回溯

  19. 单词的描述工具有正规式、有穷自动机、正规文法

  20. 有穷字母表、终止状态集合、有限状态集合是NFA的成分。

都是自己复习时候整理的。
有错欢迎指出或探讨.转载注明来源。谢谢。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值