• 低级语言和高级语言

  • 汇编和机器语言是低级语言
  • 编译程序和解释程序

  • 解释器:解释源程序不产生独立的目标程序,解释程序和源程序要参与到程序运行过程中
    编译器:解释源程序产生独立的目标程序,解释程序和源程序不参与到程序运行过程中
  • 基本成分

  • 结构:顺序结构、选择结构、循环结构
  • 编译器

  • 词法分析
    语法分析
    语义分析
    中间代码生成
    代码优化
    目标代码生成
  • 前三步不可省略,前三也是解释器的步骤
  • 符号表辅助语义正确检查和代码生成,存源程序一些符号的类型、特征等信息
  • 词法分析

  • 输入源程序视为多行字符串,根据语言词法规则识别符号是否符合规定,输出记号流
  • 语法分析

  • 输入记号流,检测语句有无语法错误,分析正确后构造语法树(分析树)
  • 可以发现所有语法错误
  • 语义分析

  • 输入语法树,检测静态语义错误,比如把字符串赋值给整数变量(类型不匹配)
  • 不能发现所有语义错误,动态语义错误运行时才能发现(比如除法除0)
  • 目标代码生成

  • 该阶段工作与具体极其密切相关
  • 中间代码生成

  • 与机器无关,可以跨平台,有利于做与机器无关优化处理和提高编译程序可移植性
  • 最常用与汇编语言相似的三地址码,实现方式为四元式;其他有后缀式,树(图)等形式,三元式
  • 正规式

  • 语法分析工具
  • 有点像正则表达式,*会代表闭包(可有0次或多次),|表或
  • 有限自动机

  • 词法分析工具
  • 初态:被箭头指向的
    终态:有两层圈
  • 确定的有限自动机(DFA)每个状态识别字符后转移状态唯一
    不确定的有限自动机(NFA)状态转移可不唯一
  • 上下文无关文法

  • 大多数程序设计语言的语法规则
  • 后缀式 中缀式

  • 中缀式 1 + 2
  • 后缀式 1 2 +
  • 优先级相同,从右向左处理
  • 语法树

  • 这树中序遍历得中缀式,后序遍历得后缀式
  • 杂项

  • 反编译不能得到源程序,只能得到汇编
  • 可视化程序设计可能要写少量程序代码