编译原理最后总结

    编译原理是我们计算机专业学生的一门必修课,这就说明了这门课对我们计算机每一个学生的重要性,编译原理旨在介绍编译程序构造的一般原理和基本方法。内容包括语言和文法、词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成。
    在刚开始学习的时候,感觉这门课理论性真的是太强了,对一些概念完全理解不了,更别说做题了,在计算机上执行一个高级语言程序一般分为两步:第一步,用一个编译程序把高级语言翻译成机器语言程序;第二步,运行所得的机器语言程序求得计算结果。而我们学习的主要就是设计和构造编译程序的基本原理和方法,并且主要是些原理性的知识。刚开始学习的时候遇到了很多理解不了的问题,比如文法和语言的转换,再到根据正则表达式转化成确定的有限自动机,后来学习语法分析主要是自上而下分析和自下而上分析,通过LL(1)分析法,左递归和回溯的消除,然后构造预测分析表,在自下而上的分析法中,规范规约,算符优先分析和算符优先关系表的构造,再到LR(0)项目集族和LR(0)分析表的构造,然后构造SLR分析表与LALR分析表。后来又对属性文法的处理方法,继承属性和综合属性,树遍历,抽象语法树,自上向下翻译,最后学习了语义分析和中间代码的生成,对逆波兰式,四元式,三元式,DGA等,回过头来再看这些的概念都比较模糊,但是通过课后习题的慢慢巩固,在大脑中倒是形成了编译原理这门课的脉络结构,对这些知识的理解倒是加深了一点,但是这远远没有达到掌握的程度,所以我还要对这些知识时常梳理,以求达到这门课程的学习要求。
### 编译原理知识点总结 编译原理是计算机科学中的核心领域之一,主要研究如何将高级语言程序翻译为低级语言程序(如汇编语言或机器语言)。以下是编译原理的核心知识点总结: #### 1. 编译器的基本结构 编译器通常由以下几个阶段组成[^1]: - **词法分析**:将源代码分解为符号(tokens),例如关键字、标识符、运算符等。 - **语法分析**:根据文法规则检查符号序列是否合法,并构建语法树。 - **语义分析**:验证语法树的语义正确性,例如类型检查。 - **中间代码生成**:将语法树转换为中间表示形式(如三地址码)。 - **优化**:对中间代码进行优化以提高运行效率。 - **目标代码生成**:将优化后的中间代码转换为目标代码。 #### 2. 文法与语言 文法用于描述语言的结构,通常采用上下文无关文法(CFG)。一个文法由四元组定义:\(G = (V_N, V_T, P, S)\),其中: - \(V_N\) 是非终结符集合。 - \(V_T\) 是终结符集合。 - \(P\) 是产生式集合。 - \(S\) 是开始符号。 推导过程可以通过最左推导或最右推导实现。如果一个文法存在某个句子对应两棵不同的语法树,则称该文法为二义文法[^2]。 #### 3. 语法树 语法树是描述句型推导过程的一种树形结构。其根节点为文法的开始符号,随着推导逐步展开,最终形成完整的树结构。语法树能够抽象出不同推导过程的共性。 #### 4. LL(1) 分析 LL(1) 分析是一种自顶向下的分析方法。构造 LL(1) 分析表需要计算 FIRST 和 FOLLOW 集合。具体规则如下: - 如果产生式的右侧不包含空串,则在 FIRST 集合中的元素上写上该产生式。 - 如果产生式的右侧可能推导出空串,则在 FOLLOW 集合中的元素上写上该产生式[^3]。 #### 5. 代码优化 代码优化的目标是提高程序的运行效率,同时保持语义不变。常见的优化方法包括: - 删除公共子表达式。 - 复写传播。 - 删除无用代码。 - 代码外提。 - 强度削弱。 - 删除归纳变量[^4]。 #### 6. 目标代码生成 目标代码生成是编译过程的最后一步,将中间代码转换为目标代码。目标代码的形式可以是绝对机器代码、可重定位机器代码或汇编语言代码[^4]。 ```python # 示例:简单的三地址代码生成 def generate_target_code(ir_code): target_code = [] for line in ir_code: if 'ADD' in line: target_code.append('MOV AX, {}'.format(line[1])) target_code.append('ADD AX, {}'.format(line[2])) target_code.append('MOV {}, AX'.format(line[0])) elif 'SUB' in line: target_code.append('MOV AX, {}'.format(line[1])) target_code.append('SUB AX, {}'.format(line[2])) target_code.append('MOV {}, AX'.format(line[0])) return target_code ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hibernate0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值