您的位置:首页 > 其它

First-编译原理课程简介

2016-05-27 10:04 288 查看

First-课程简介

什么是编译器

是一个软件程序

核心功能:源代码(C/C++/Objcet-C/JAVA) -> 目标代码(x86/IA64/ARM/MIPS)

运用流程:源代码 -> 编译器 -> 目标代码 -> 计算机 -> 计算结果

编译器带来的好处及其影响

好处:减少程序员工作的代码量

编译器对计算机科学的发展的影响:

理论上:算法、数据结构、形式语言与自动机等

实践上:软件工程、体系结构等

编译器架构

为什么学习编译原理及如何学好

为何学:

编译原理包含计算机科学的很多核心思想,如算法、数据结构、软件工程等。

编译器是其他研究的重要基础

可以设计出优秀的新语言

大型软件的构造及维护的需要

如何学:

注重解决实际问题

巩固理论知识:数据结构、算法等核心思想

编译器结构

模块化结构,各模块有各模块的功能

前端:负责与源代码交互

后端:负责与目标代码交互

分阶段“流水线结构”:不同阶段处理不同的问题,如何合理规划组织各个阶段是编译器设计中非常重要的问题,关乎编译器的实现及维护的难易

源代码 -> 前端 -> 中间表示 -> 后端 -> 目标代码

编译器例子

源语言:加法表达式语言Sum

整型数字:n

加法:e1+e2

目标机器:栈式计算机Stack

一个操作数栈

两条指令

压栈指令:push n

加法指令:add

把编译程序1+2+3到栈式计算机的步骤:

词法语法分析

读入1,符合第一条规则

读入+,符合第二条规则

读入2,符合第一条规则

读入+,符合第二条规则

读入3,符合第一条规则

语法树构建:某种数据结构



后序遍历,代码生成:

push 1;

push 2;

add;

push 3;

add;

栈式计算机动态执行得到结果

头指针指向栈底

读入一条指令push 1,把1压进栈底,指针指向1

读入一条指令push 2,把2压进栈底,指针指向2

读入一条指令add,把1、2弹出栈,计算结果压入栈,指针指向压入的结果

读入一条指令push 3,把3压进栈底,指针指向3

读入一条指令add,把结果、3弹出栈,计算结果后压入栈,指针指向压入的结果

至此,栈里只剩下一个元素,即是执行结果

其中代码优化(常量折叠优化)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息