编译原理笔记2 引论续之编译程序的…

1.词法分析:

  • 任务:输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个的单词
  • 单词:是高级语言中有实在意义的最小语法单元,他由字符构成
  • 单词有:基本字(高级语言中原来定义好的单词,对于c语言有特殊的意义,不能随便应用,他构成了程序的框架如void,int,float),标识符(用户自己定义的单词),常数,运算符(+,-,*,/,=,and等),界限符(功能是分割开两个标示符,语句及其他一些特殊的程序段,等等如{},;,,,())
  • 词法分析:按照词法规则,识别出正确的单词,转换成统一规格,备用
  • 转换:1)对基本字、运算符、界限符的转换2)标识符的转换(转换为类号+内码:类号:一方面说它是标识符,另一方面说明它是哪一类标识符。内码:说明它是哪一个标识符)3)常数的转换(规则:)4)转换完成后的格式(类号、内码)
  • 转换的工具:描述词法规则的有效工具是正规式(作用是确定单词是不是符合这个程序语言的正规描述,也就是说单词是不是符合程序语言要求的规范)和有限自动机(单词和规则的比较通过有限自动机)

2.语法分析:

  • 任务:在词法分析的基础上,根据语言的语法规则,把单词符号组成各类的语法单位:短语、子句、语句、过程、程序
  • 语法规则:语言的规则,又称文法;规定单词如何构成短语、语句、过程和程序
  • 语法规则的表示:BNF:A::=B|C读作:A定义为B或C
  • 语法分析的方法:----推导(derive)和规约(reduce)
  • 推导:---最左推导、最右推导(每次都把最右边的非终结符按规则转化成另一个东西)
  • 规约(推导的逆过程,从终结符推到非终结符):最右规约(对应最左推导)、最左规约(对应最右推导)
  • 人通过逻辑思维推导很简单,但是计算机推导很难进行的,因此,计算机是通过语法树进行推导和规约的

3.中间代码生成:

  • 对语法分析识别出的各类语法范畴,分析其含义,进行核初步翻译,产生介于源代码和目标代码之间的一种代码
  • 分为两个阶段:
  •     对每种语法范畴进行静态语义检查
  •     若语义正确,就进行中间代码的翻译。
  • 中间代码形式:四元式、三元式、逆波兰式
4.优化
  • 任务:对前面产生的中间代码进行加工变换,以期在最后阶段能产生更为高效的目标代码。
  • 原则:等价变换。
  • 主要方面:公共子表达式的提取、合并已知量、删除无用语句、循环优化。
5.目标代码生成
  • 任务:把经过优化的中间代码转化为特定机器上的低级语言代码
  • 目标代码的生成:
  •    绝对指令代码:可立即执行的目标代码
  •    汇编指令代码:汇编语言程序,需要通过汇编程序汇编后才能运行
  •    可重定位指令代码:先将各目标模块连接起来,确定变量、常数在主存中的位置,装入主存后才能成为可以运行的绝对指令代码。
6.表格与表格管理
  • 表格作用:用来记录源程序的各种信息以及编译过程中的各种状况。
  • 与编译前三阶段有关的表格有:符号表、常数表、标号表、分程序入口表、中间代码表等。
1)符号表:用来等级源程序中常量名、变量名、数组名、过程名等,记录它的性质、定义和引用情况。
2)常数表与标号表:
3)入口名表
4)中间代码表
7.出错处理
  • 任务:如果源程序有错误,编译程序应设法发现错误,并报告给用户。
  • 完成:有专门的出错程序来完成。
  • 出错类型:
  •   语法错误:在词法分析和语法分析阶段检测出来。
  •   语义错误:一般在语义分析阶段检测。

8.遍
  • 指对远程或源程序的中间结果从头到尾扫描一次,并做有关的加工处理,生成新的中间结果或目标代码。
  • 一遍扫描:
  • 多遍扫描
  •    优点:节省内存空间,提高目标代码质量,使编译的逻辑结构清晰。
  •    缺点:编译时间较长。
  •     注:在内存许可情况下,还是遍数尽可能少些为好。

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