编译原理学习笔记-1
2015-09-21 22:31
197 查看
1.1程序设计语言与编译
1)程序设计语言
-. 高级语言 :c,c++-. 汇编语言 :有字母组合成命令符号。对于不同硬件机器,有不同的汇编语言,因为有不同的机器语言。
-. 机器语言 :只有0、1表示
高级语言执行步骤:将高级语言翻译成机器语言,然后运行机器语言得到结果
2)程序设计语言的转换,有两种方法
编译:将高级语言整个转换成低级语言解释:对输入的一句语言解释,并执行马上得到执行结果,然后接收下一句。不产生目标程序。直观易懂但是效率低
编译的转换过程:
两个阶段:编译——执行
三个阶段:编译——汇编——运行
1.2编译程序
编译程序的工作
编译程序的过程和翻译自然语言类似。从单词,语句,语义,修改,草稿到定稿。1. 词法分析
2. 语法分析
3. 语义分析和中间代码生成
4. 优化
5. 目标代码生成
词法分析:对输入的程序的字符串进行扫描和分解识别出一个个单词
语法分析:在词法分析的基础上根据语言的语法规则,把单词符号组成各类的语法单位:短语,子句,语句、过程、程序
语法分析的方法:
推导和归约
语义分析:使用语法树和符号表中的信息来检查源程序是否和语言定义的语义一致。
中间代码生成:源程序翻译成目标代码的过程。中间代码有多种形式。
优化:对前面产生的中间代码进行加工变换。以期产生更高效的目标代码。
目标代码生成:
- 绝对指令代码:可立即执行
-汇编指令代码: 通过汇编后才能运行
- 可重定位指令代码:先将个目标模块连接起来,确定变量、常数在内存的位置。
表格管理:
符号表:记录源程序中使用的变量的名字,并收集每个名字的各种属性
常数表:登记各类常量值
标号表:登记标号的定义与应用
入口名表:登记过程的层号
1.3编译程序的生成
1.3.1. 直接用机器语言编写编译程序1.3.2. 用汇编语言编写编译程序
1.4 编译程序构造
需要了解源语言,目标语言,编译方法。《编译原理》就是找到更好地方法进行编译。声明:
–以上引自东南大学的编译原理课件
相关文章推荐
- [memory fence] Memory Reordering Caught in the Act
- 求逆序对模板题(完善模板:树状数组或归并排序)
- 安装IDES AFS6.0 报错 CJS-00084 ORA-955
- 45秒掌握10本最畅销创业书籍精华! (二)
- 大讲-----原优酷菜单
- 解决TalbleView头部或底部子控件不显示问题
- [leetcode 35] Search Insert Position
- mysql函数大全
- oracle 多表查询语句
- 【软考之路】软考视频总结(上)
- Leetcode71: Binary Tree Inorder Traversal
- CodeBlocks中程序的多文件组织
- 在生鲜电商领域创业到底是怎样的一种苦逼体验?【创业者说】
- 4 Median of Two Sorted Arrays
- mysql免安装版配置
- 2015 ACM/ICPC 沈阳赛区网络赛 1010.Jesus Is Here (HDOJ5459)
- doget和dopost的区别
- 迅维网
- java的Class类
- win10使用genymotion出现Unable to start the virtual device(VirtualBox cannot start the virtual device)