编译原理知识点总括

编译过程概述

  • 词法分析

  • 语法分析

  • 语义分析

  • 中间代码生成

  • 中间代码优化

  • 目标代码生成
    在这里插入图片描述
    源程序–>前端–>中间代码–>后端–>目标代码
    单词,具有语义的最小字符串
    概念: 词法分析器、语法分析器、正则表达式、NFA、DFA、词法单元、语法树

    算法:

    1. 正则表达式 转 NFA (词法分析)

    2. NFA 转 DFA (词法分析)

    3. 最小化DFA状态数 (词法分析)

    4. 构造 LR0 语法 (语法分析)

    5. 构造 LR1 语法 (这一步只需要看,可以不用实现) (语法分析)

    6. 构造 LALR1 语法 (语法分析)

DFA与NFA特点比较

DFA特点:

  1. 初态唯一

  2. 输入字符不包括空符号串

  3. 有向边上只有一个字符

  4. 一个状态对某个字符最多只有一条出边

NFA特点:

  1. 初态不唯一

  2. 输入字符包括空符号串

  3. 有向边上可以为字符串

  4. 一个状态对某个字符可能有多条输出边,即状态的后继不唯一

在这里插入图片描述

  • 文法:判断句子结构合法与否的依据
  • 符号串:由字母表中的符号构成的任何有穷序列
  • 空串:长度为0的符号串
  • V*:V上所有符号串的集合
  • 句子只由终结符构成
  • 句型包含句子
  • 若L(G)1=L(G2),则称文法G1和G2是等价
    0型文法 短语文法 图灵文法 α–>β ,α至少有非终结符
    1型或上下文有关的文法 |α|<=|β|,S–>ε ,S不在右
    2型或上下文无关的文法 α只能有一个非终结符
    3型或正规文法 词法分析
    如果再推导的任何一步α➜β,其中 α,β是句型,都是对α中最左(右)非终结符进行替换,则这种推导为最左(右)推导,最右推导被称为规范推导,由规范推导所得的句型成为右句型规范句型
  • 二义性:如果一个文法存在某个句子对应两颗不同的语法树,则说这个文法是二义的
  • 回溯,发现有错误,就回退回去
  • 句柄:一个右句型的直接短语
  • 二元式:(单词种别,属性值)
    在这里插入图片描述
    LL1文法
    L:从左向右扫描输入,
    L: 产生最左推导
    1:在每一步中需要向前看一个输入符号来决定语法分析动作
    SDD是关于语言翻译的高层次规格说明,屏蔽了许多具体实现细节,使用户不必显式的说明翻译发生的顺序
    SDT:可以看做对SDD的一种补充,是SDD的具体实施方案,显式的指明了语义规则的计算顺序,以便说明某些实现
    中间代码
  1. 形式简单
  2. 语义明确
  3. 便于翻译
  4. 独立与目标语言
原文地址:https://www.cnblogs.com/CCCrunner/p/11781643.html