编译原理

·1#第一章 编译程序概论

学习目标

  1. 编译的各个阶段
  2. 编译程序的概念
  3. 解释器,编译程序的结构和组合

编译程序的概念

将高级语言翻译为低级语言(汇编或者机器),这种翻译叫做编译原理

编译的阶段

词法分析>语法分析>语义分析>中间代码生成>代码优化>目标代码生成

中间会有出错处理

编译阶段的组合

  • 分析阶段:词法,语法,语义,只是对程序进行识别和检查
  • 综合阶段:中间代码生成,代码优化,目标代码生成,对源代码进行翻译,生成目标代码

解释器和编译器

  • 共同点:都是语言的一个实现系统
  • 不同点: 解释器是源程序的一个执行系统,结果是执行结果。编译器是源程序的转换系统,结果是目标语言。

tips

  • js,python直接使用解释器,运行过程中可以动态改变。
  • 解释器没次执行都要解释一遍,所以程序运行慢。编译器编译完成后,以机器语言存储,所以执行快。

第二章 文法和语言

学习目标

  • 掌握:自上而下与自下而上的分析方法
  • 理解:文法的形式定义,推导,归约,句型,句子,语言,上下文无关文法,规范句型,语法树,短语,句柄
  • 了解:文法的类型,文法使用的限制,文法的二义性

直观概念

语言是一个记号系统
程序设计语言包括:语法和语义

  • 语法:一组规则,用它可以形成和产生一个和合适的程序

  • 语义:

    1. 静态语义:一系列的规则,确定哪些合乎语法的程序是合适的
    2. 动态语义:表明程序要做什么
  • 文法:语言语法的描述工具,用有穷的规则吧无穷的句子集描述出来

符号和符号串

  • 字母表:元素的非空有穷集合
  • 符号串:由字母表的符号组成的任何有穷序列(是有顺序的)
    不含任何符号的符号串为空串。
  • 其他概念:P21

文法

  • 规则,产生式,生成式:a::=b a定义b
  • 四元组:Vn=非终结符, Vt=终结符 P=规则集合 S=识别符或者开始符号
  • 具体应用:P22
  • 推导和规约 P22-23

句型,句子,语言

  • 句型:字符串X是从开始符推导出来的,则x是文法G的句型。
  • 文法:如果一个句型仅有终结符组成,那就是句子。
  • 语言:L(G),是文法G的一切句子的集合。

上下文无关文法及其语法树

  • 规范推导和规范句型:每一次推导都是替换a中,都是替换最左和最右的非终结符,则称为推导为最左(右)推导。
  • 最右推导被称为规范推导
  • 由规范推导得到的句型为规范句型
  • 语法树:P27
  • 如果一个文法存在每个句子对应两课不同的语法树,则这个文法是二义性的。
  • 分析方法:自上而下和自下而上的分析方法 P30

词法分析

  • 正规文法:文法中的P,即规则,都有以下形式:A->aB或A->a
  • 正规式和正规集
  • 正规文法和正规式的等价,相互转换(P46)
  • 有穷自动机:DFA(确定的有穷自动机),NFA(不确定的有穷自动机)
  • DFA:P48 DFA状态图和矩阵表示
  • NFA: P49
  • 把NFA用子集法转换为DFA,用DFA转换

语法分析

  1. 自顶向下分析
  2. 自底向上分析

你可能感兴趣的:(编译原理)