HNU_Compiler Principles_Introduction
课程考评:
(1) 一班分6组,15min/组,报告10min,讨论5min;也可以调整为合2为1,30分钟/组
(2) 每个学生每堂讨论课后,写总结(电子稿)交给老师;
(3) 小班讨论主题:
实验安排:
4次,从8个实验中选4个;
每人独立完成,并通过测试;
提交:
实验报告打印稿、电子版
源代码、测试样例电子版
参考编译器:tiny编译器,源代码见课程中心
第一章 绪论
1.编译的含义:
-机器语言
-高级程序语言
2.编译过程和环节
3.编译器的构造方法学:模型、算法、工具
4.编译技术的广泛应用
5.程序语言的种类
6.程序设计语言基础
计算机(CPU+存储器)与机器语言:计算要快!
数据->输入->CPU->进行运算,输出->存储器(单元地址)
快的途径:
提高单个CPU做事的速度。把电路做的越小,越灵敏,微电子技术:摩尔定理
采用并行处理策略:多核CPU,多线程,集群系统
第二种策略的发挥是有条件的:提交的计算任务要有并行性,如果是串行性计算任务,并行没有意义;
因此,分析并提取任务中的并行性,构建并行执行的机器代码,是编译器中要考虑的重要问题,编译技术的高级话题。
计算机的特点:
CPU与存储器的不协调,CPU很快,存储器的速度慢得多
则存储器分为了多种,【从左到右依次变大】
1.寄存器Register(最快)2.缓存Cash 3.内存 4.磁盘
因此,寄存器的分配,是一个编译器要考虑的另一重要问题。
高级程序语言VS机器语言
高级程序语言特点:
概念与概念之间的逻辑关系表达
变化和相互作用的时序和逻辑关系表达:流程与控制
条件 if;互斥的离散事件:switch;循环:for,while
直观表达,易于理解,简洁,易于掌握,修改;
满足人处理的要求:
追求的目标:
易懂,通用(与计算机型号无关性),鲁棒(可靠),
重用(组件化,可装配性,互操作能力;
机器语言的特点:
1.代码和数据的存储;2.数据的运算与传输;3.控制指令:跳转
满足机器处理的要求:
概念单一:指令,数据,地址
每句的含义单一;
代码很长;
多句综合难以理解;
指令、存储器地址很多;
编译技术的含义
译:翻译,然后优化;
策略:高级语言->通用机器语言->优化->特定机器语言->优化;
翻:编译器构建方法学:使用模型,算法,工具
策略:用程序生成程序:
编译器构造工具+简单的表达式 --》编译器
编译过程:(符号表)7步
分为前端和后端,
前端不需要考虑目标机型,后端只需要通用机器代码转变成目标机器特定代码
特点:彼此之间相互独立,又可对接,前提:中间代码有国际标准
词法分析/扫描
- 高级语言程序由句子串联而成,句子由词素(lexeme)串联而成
- 词素分为两类:预定义符(保留字,标点符,运算符)和自定义符;
- 词法单元 (token)
语法分析
语义分析
中间代码生成
根据语义分析的输出,生成通用机器语言,也叫中间表示,例如:三地址码
中间代码优化
目标代码生成
目标代码优化
编译中优化的价值
3.编译器构造方法学:
就事论事:代价高,时间长,隐患多,脆弱
编译器构造工具
4.编译技术的广泛应用
技术应用
方法学