First-编译原理课程简介
Posted sziit_jerry
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了First-编译原理课程简介相关的知识,希望对你有一定的参考价值。
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弹出栈,计算结果后压入栈,指针指向压入的结果
- 至此,栈里只剩下一个元素,即是执行结果
- 其中代码优化(常量折叠优化)
以上是关于First-编译原理课程简介的主要内容,如果未能解决你的问题,请参考以下文章