• 编译原理知识点总括


    编译过程概述

    • 词法分析

    • 语法分析

    • 语义分析

    • 中间代码生成

    • 中间代码优化

    • 目标代码生成
      在这里插入图片描述
      源程序–>前端–>中间代码–>后端–>目标代码
      单词,具有语义的最小字符串
      概念: 词法分析器、语法分析器、正则表达式、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. 独立与目标语言
  • 相关阅读:
    把Orchard部署到Windows Azure Web Sites
    使用Windows Live Writer 发布博客园博客
    使用Microsoft Word 2013 发布Blog到博客园
    Java栈的简单实现
    Java中的运算符
    Java简单双向链表实现 @version 1.0
    Java中的面向对象II
    认识和分析日志文件
    两数之和问题
    括号序列算法
  • 原文地址:https://www.cnblogs.com/CCCrunner/p/11781643.html
Copyright © 2020-2023  润新知