Chinaunix首页 | 论坛 | 博客
  • 博客访问: 801619
  • 博文数量: 104
  • 博客积分: 915
  • 博客等级: 下士
  • 技术积分: 2171
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-24 21:34
文章分类

全部博文(104)

文章存档

2018年(4)

2015年(14)

2014年(9)

2013年(56)

2012年(21)

分类: LINUX

2012-08-29 08:32:53

*在计算机上执行一个高级语言的程序的一般步骤:
   1)用一个编译程序把高级语言翻译成机器语言程序;
   2)运行所得的机器语言程序求得计算结果。

*编译程序的工作过程一般可以划分为五个阶段:
  1)词法分析:输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个的单词
              (如基本字、标识 符、常量、运算符、标点符、左右括号等)
     描述词法规则通常用:正规式 和 有限自动机
     依循的原则:词法规则。。。线性分析。。。

  2)语法分析:在词法分析的基础上,根据语言的语法规则,把单词符号串分解成各类语法单位(语法范畴)               (如,“短语”、“子句”、“句子”、“程序段”等)
     描述语法规则通常用:上下文无关文法
     依循的原则:语法规则。。。层次结构分析。。。。。

  3)语义分析与中间代码产生:对语法分析所识别出的各类语法范畴,分析其含义,并进行初步翻译(产生中间代码)。
     描述语义规则通常用:属性文法
     依循的原则:语义规则。。。

  4)优化:对前段产生的中间代码进行加工变换,以便在最后阶段能产生出更高效的目标代码。
     依循的原则:程序的等价不变换规则。

  5)目标代码生成:把中间代码(或经优化处理后)变换成特定机器上的第几语言代码。
     这一阶段实现了最后的翻译。

(并非所有编译程序都分成这五个阶段。)

*编译器前端(frontend)
   主要负责 解析输入的源代码 及 语义检查,有 语法分析器 和 语义分析器 协同工作。
1)主要负责把源码中的单词(token)找出来,
2)主要负责把这些分散的单词按预先定义好的语法组装成有意义的表达式。
3)最终,形成一个抽象的语法树。

*编译器后端(backend)
   主要负责分析,优化中间代码 及 生成机器代码。
   每当规则匹配到一条语句时,它调用相应的例程来创建合适的抽象语法树节点。
阅读(7637) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~