评分标准
- 书面作业 10%
- 2% 按时提交
- 2% 提交内容
- 6% 作业得分
- 提交截止24小时前联系老师得到许可可以在3天内缓交并得到2%+6%的分数
- 上机实验 30%
- 6% 按时提交
- 6% 提交内容(说明不能超过3页,否则倒扣分)
- 18% 实验得分
- 组队调整
- 单人模式:1.10倍
- 两人合作:组长1.05倍,组员1.00倍
- 三人合作:组长0.95倍,组员0.90倍
- 额外奖励:第3次实验进行编译效率PK
- 实验内容:全部
- 给分规则:
- 一次实验100分,四次400分
- 编译效率Bonus先判定,然后判定组队加成
- 额外分数计入所有平时分(40%)
- 期末考试 60%
编译器的作用
编译器:
- 输入源语言的程序
- 输出目标语言编写的程序
- 通常目标程序是可以执行的
解释器:
- 利用输入执行源程序中指定的操作
- 不生成目标程序,而是根据源程序的语义直接运行
- 运行中出现错误修复后无法从断点直接继续
编译器的结构
- 分析部分(前端)
- 分析语法和词法
- 收集信息存放到符号表
- 与机器无关
- 综合部分(后端)
- 根据中间表示和符号表信息构造目标程序
- 与机器相关
编译器执行的7个步骤:输入字符流(token)
- 词法分析器 -> 符号流
- 读入字符流,输出为有意义的词素(Lexeme)
token_name
:语法分析attribute_name
:语义分析、代码生成
- 语法分析 -> 语法树 (语法错误?)
- 根据词法单元的第一个分量来创建树形的中间表示形式(如语法树),指出了词法单元流的语法结构
- 语义分析 -> 语法树 (类型错误?)
- 使用语法树和符号表中的信息,检查源程序是否满足语言定义的语义约束,同时收集类型信息
- 中间代码生成器 -> 中间表示形式
- 根据语义分析输出,生成类机器语言的中间表示
- 三地址代码:
- 每个指令最多包含三个运算分量
- 线性指令、结构简单,易于生成机器指令
- 机器无关代码优化器 -> 中间表示形式
- 通过对中间代码的分析,改进中间代码的质量(快、短、耗能少……嗯?)
- 代码生成器 -> 目标机器语言
- 把中间表示形式映射到目标语言
- 寄存器的分配、指令选择
- 极其相关代码优化器 -> 目标机器语言
其他概念
- 符号表管理:记录源程序中使用的变量的名字,收集各种属性
- 趟(Pass)(没有展开讲)
- 编译器构造工具
- 扫描器(Lex/Flex)
- 语法分析器(Yacc/Bison)
- 语法制导的翻译引擎
Loading Comments By Disqus