编译原理 -概述

简介: 编译原理 -概述

编译原理


什么是编译器


  • 计算机设备包括个人计算机、大型机、嵌入式系统、只能设备等
  • 核心的问题都是软件的构造
  • 目前绝大部分软件都是由高级语言书写
  • 成百种高级语言
  • 这些语言如何运行在计算机上的呢
  • 编译器
int main()
{
  printf("hello world!\n");
  return 0;
}
  .text
str:
  .string "hello world\n"
  .globl main
main:
  pushl  %ebp
  movl   %esp, %ebp
  pushl  $str
  call   printf
  leave
  ret
  • 编译器是一个程序
  • 核心功能是将源程序代码翻译成目标代码


编译器和解释器


  • 解释器也是处理程序的一种程序


编译器简史


  • 计算机科学史上出现的第一个编译器是Fortran语言的编译器
  • Fortran语言的编译器的成功给计算机科学发展产生巨大的影响
  • 理论上:形式语言,文法,自动机,语法制导的翻译等
  • 实践上:算法,数据结构
  • 编译器架构:


为什么学编译原理


  • 编译原理集中体现了计算机科学的很多核心思想
  • 编译器是其他领域的重要的研究基础
  • 编译器本身就是非常重要的研究领域
  • 新的语言的设计
  • 大型软件的构造和维护
  • 编译器设计是理论和实践高度结合的一个领域
  • 理论:深入学习掌握各种算法和数据结构
  • 实践:将理论应用于解决实际问题


编译器的结构


  • 编译器是具有非常模块化的高层结构
  • 编译器可以看成多个阶段构成的流水线结构


无优化的编译器结构:

=》词法分析=》语法分析=》语义分析=》代码生成=》


一种更复杂的编译器结构:

=》词法分析=》语法分析=》语法树构造=》语义分析=》翻译=》正规化=》指令选择=》控制流分析=》寄存器分析=》代码生成=》汇编器=》连接器=》


  • 编译器是由多个阶段组成,每个阶段要处理不同的问题
  • 使用不同的理论、数据结构和算法
  • 因此,编译器设计中的重要问题是如何合理划分组织各个阶段
  • 接口清晰
  • 编译器容易实现和维护


编译器实例


源语言加法表达式Sum

  • 两种语法形式:
  • 整形数字n
  • 加法 e1 + e2


目标机器:栈式计算机stack

  • 一个操作数栈
  • 两条指令
  • 压栈指令:push n
  • 加法指令:add


任务:编译程序1+2+3到栈式计算机

  • 阶段1:词法语法分析
  • 阶段2:语法树的构建
  • 阶段3:代码生成


编译器的构造和具体的目标相关,目前的结构是:

前端=》tree=》栈式计算机代码

目录
相关文章
|
自然语言处理 JavaScript 前端开发
程序设计语言概述
程序设计语言是用于编写计算机程序的一种形式化语言。它提供了一套语法和语义规则,用于描述计算机程序的结构和行为。
282 0
|
自然语言处理 Java 编译器
【编译原理】第一章,什么是编译原理?
【编译原理】第一章,什么是编译原理?
|
算法 Unix 程序员
C++简介 C语言编程原理
C++简介 C语言编程原理
|
自然语言处理 算法
第二章 总结及作业(6789B)【编译原理】
第二章 总结及作业(6789B)【编译原理】
161 0
|
安全 前端开发 测试技术
SystemVerilog学习-01-系统验证概述(一)
SystemVerilog学习-01-系统验证概述
322 0
SystemVerilog学习-01-系统验证概述(一)
|
监控 安全 搜索推荐
SystemVerilog学习-01-系统验证概述(二)
SystemVerilog学习-01-系统验证概述
398 0
SystemVerilog学习-01-系统验证概述(二)
|
程序员 C语言
《C语言深度剖析》第五章 内存管理 p1(完结)( C语言从入门到入土(进阶篇)(一)
本章节文章是作者通过观看《C语言深度剖析》等各种资料总结的精华,基础部分省略了不少,是为了让大家能够更加深入了解C语言的魅力!因为为了避免与之前的文章发生赘述,所以就直接讲作者认为的精华部分哈!现在正文开始!
《C语言深度剖析》第五章 内存管理 p1(完结)( C语言从入门到入土(进阶篇)(一)
|
Java 程序员 编译器
《C语言深度剖析》第五章 内存管理 p1(完结)( C语言从入门到入土(进阶篇)(二)
本章节文章是作者通过观看《C语言深度剖析》等各种资料总结的精华,基础部分省略了不少,是为了让大家能够更加深入了解C语言的魅力!因为为了避免与之前的文章发生赘述,所以就直接讲作者认为的精华部分哈!现在正文开始!
《C语言深度剖析》第五章 内存管理 p1(完结)( C语言从入门到入土(进阶篇)(二)
|
C语言 C++
《C语言深度剖析》第三章 预处理详解 p2(完结) C语言从入门到入土(进阶篇)(一)
本章节文章是作者通过观看《C语言深度剖析》等各种资料总结的精华,基础部分省略了不少,是为了让大家能够更加深入了解C语言的魅力!因为为了避免与之前的文章发生赘述,所以就直接讲作者认为的精华部分哈!现在正文开始!
《C语言深度剖析》第三章 预处理详解 p2(完结) C语言从入门到入土(进阶篇)(一)
|
编译器 Linux C语言
《C语言深度剖析》第三章 预处理详解 p2(完结) C语言从入门到入土(进阶篇)(二)
本章节文章是作者通过观看《C语言深度剖析》等各种资料总结的精华,基础部分省略了不少,是为了让大家能够更加深入了解C语言的魅力!因为为了避免与之前的文章发生赘述,所以就直接讲作者认为的精华部分哈!现在正文开始!
《C语言深度剖析》第三章 预处理详解 p2(完结) C语言从入门到入土(进阶篇)(二)