编译原理
文章平均质量分 88
个人编译原理学习记录
蔗理苦
Hello, man
展开
-
2024-06-23 编译原理实验5——目标代码生成
可以看出,我们定义了IR的变量结构,使用数组的形式进行存储(table)。在词法分析、语法分析、语义分析和中间代码生成程序的基础上,将C−−源代码翻译为MIPS32指令序列(可以包含伪指令),并在 SPIM Simulator上运行。此次实验在原先的基础上新增加了dst_code.c和dst_code.h文件,用于将中间代码转换成目标代码。首先生成read函数和write函数的目标代码,然后使用genOneFunction处理每一个函数。当你完成之后,你就拥有了一个自己独立编写、可以实际运行的编译器。原创 2024-06-23 02:32:02 · 795 阅读 · 2 评论 -
2024-06-23 编译原理实验4——中间代码生成
我们注意到,一个exp的处理需要分两种情况:刚定义和已定义。由于在后面的实验中还会用到本次实验已经写好的代码,因此保持一个良好的代码风格、系统地设计代码结构和各模块之间的接口对于整个实验来讲相当重要!因此,translateExp函数对每一个匹配的产生式都进行了两种处理:option = 0和option = 1。(1)如果Args→Exp COMMA Args,则继续处理Args,即函数的第一个if语句。(2)分情况考虑,如果exp不为数组或结构,则翻译exp,即函数的第二个if语句。原创 2024-06-23 02:14:09 · 623 阅读 · 0 评论 -
2024-06-23 编译原理实验3——语义分析
基于前面的实验,编写一个程序对使用 C—语言书写的源代码进行语义分析,输出语义分析中发现的错误(涉及 17 种错误类型)并完成实验报告,实验中主要使用 C 语言。而aa和cc是结构等价的,我们实现了把名等价变成结构等价的附加功能,因此aa和cc之间的赋值没有报错。其中第12行实际上是不符合语法规范的,我们让语法检查对它“放行”,在语义检查中也能查到问题。成功检测出所有语义错误,其中第五行符合多个语义错误,将符合的每一个错误都输出出来了。在结构体赋值时,由于aa和bb不等价,因此不能赋值,我们给出了报错。原创 2024-06-23 01:45:15 · 1244 阅读 · 0 评论 -
2021-10-29 编译原理实验2——语法分析
文章目录一、实验要求二、tree.h三、tree.c四、lizi.l的修改五、syntax.y的修改与main函数六、编译代码七、附完整代码一、实验要求基于前面的实验,编写一个程序对使用 C–语言书写的源代码进行语法分析,并打印语法树,实验使用的主要分析工具是Bison,使用C语言完成程序。基本要求a. 对程序进行语法分析,输出语法分析结果;b. 能够识别多个位置的语法错误。附加要求a. 按照正确的缩进格式输出带有行号信息的语法树;b. 能够处理简单的语法错误;二、tree.h#if原创 2021-11-04 02:26:12 · 1614 阅读 · 1 评论 -
2021-10-10 编译原理实验1——词法分析
文章目录一、实验要求二、使用flex三、测试样例四、测试结果一、实验要求编写一个程序对使用 C–语言书写的源代码进行词法分析,并打印分析结果。学习词法分析工具 Flex的使用方法,并使用 C 语言完成程序。基本要求(6%)a. 输出C–文法规定的基本词法分析结果(27种token);b. 输出未定义的标识符;c. 识别单行注释。附加要求(6%)a. 识别八进制和十六进制数;b. 识别指数形式浮点数;c. 识别多行注释。二、使用flex编写 flex 文件,规范正则表达式进行单词匹原创 2021-11-04 02:08:33 · 1144 阅读 · 0 评论 -
2021-10-31 《编译原理》学习笔记:第8周
文章目录4.12 LR(1) 分析算法4.12.1 SLR 分析算法的评价4.12.2 SLR 分析算法的问题4.12.3 SLR 算法的改进——LR(1)4.12.4 LR(1) 示例4.13 LALR(1) 分析算法4.13.1 LR(1) 分析算法的评价4.13.2 LR(1) 算法的变动——LALR(1)4.13.3 示例4.13.4 LALR(1) 分析算法的特点4.12 LR(1) 分析算法4.12.1 SLR 分析算法的评价优点:有可能减少需要归约的情况有可能去除需要移进-归约冲原创 2021-10-31 05:25:24 · 1196 阅读 · 0 评论 -
2021-10-23 《编译原理》学习笔记:第7周
文章目录4.10 LR(0) 分析算法4.10.1 LL(I) 分析算法的评价4.10.2 自底向上分析算法4.10.3 算法思想4.10.4 LR(0) 分析表4.10.5 算法实现4.11 SLR 分析算法4.11.1 LR(0) 分析算法的评价4.11.2 SLR 与 LR(0)4.10 LR(0) 分析算法4.10.1 LL(I) 分析算法的评价 LL(1) 分析法:从左(L)向右读入程序,最左(L)推 导,采用一个(1)前看符号优点:算法运行高效有现成工具可使用缺点:原创 2021-10-23 16:58:26 · 178 阅读 · 0 评论 -
2021-10-17 《编译原理》学习笔记:第6周
文章目录3.8.4 最长匹配3.8.5 跳转表第四章 语法分析4.1 语法分析器介绍4.1.1 语法分析器的任务4.1.2 例子4.2 上下文无关文法(CFG)4.2.1 定义4.2.2 举例4.2.3 规则4.2.4 推导4.3 分析树与二义性4.3.1 分析树4.3.2 二义性文法4.4 自顶向下分析4.4.1 思想介绍4.4.2 算法步骤4.4.3 代码4.4.4 算法讨论4.4.5 使用前看符号4.5 递归下降分析算法4.5.1 算法基本思想4.5.2 示例4.5.3 算术表达式的递归下降分析4.5原创 2021-10-18 00:16:36 · 420 阅读 · 0 评论 -
2021-09-26 《编译原理》学习笔记:第3周
文章目录3.6.3 ε - 闭包的计算3.6.4 闭包的两种计算方式3.7 DFA 的最小化(Hopcrofe 算法)3.7.1 算法思想3.7.2 等价类3.7.3 示例3.8 将 DFA 转换为可执行代码3.8.1 DFA 的代码表示3.8.2 转移表3.8.3 驱动代码3.6.3 ε - 闭包的计算(1)深度优先set closure = {}; // 集合,最初为空void eps_closure(x) { closure += {x};原创 2021-09-26 18:29:17 · 603 阅读 · 0 评论 -
2021-09-16 《编译原理》学习笔记:第2周
文章目录第三章 词法分析3.1 简介3.1.1 编译器的阶段3.1.2 词法分析器的任务3.1.3 单词 / 记号 / token3.1.4 信息的二元式表示3.2 手工构造法3.2.1 词法分析器的实现方法3.2.2 转移图3.2.3 标识符的转移图3.2.4 识别关键字(if)3.3 正则表达式3.3.1 自动生成工具3.3.2 定义3.3.3 正则表达式的代数定律3.3.4 举例3.3.5 正则表达式与正规文法3.3.6 正则表达式的扩展3.4 有限状态自动机3.4.1 有限状态自动机(FA)3.4.原创 2021-09-16 19:32:43 · 539 阅读 · 0 评论 -
2021-09-09 《编译原理》学习笔记:第1周
文章目录第一章 引论1.1 编译器1.1.1 什么是编译器1.1.2 编译器和解释器1.1.3 编译器的原则1.2 编译器的结构1.2.1 内部结构1.2.2 两阶段和三阶段结构1.2.3 流水线结构的思想1.2.4 常见的编译器结构1.3 小结1.4 编译器实例1.5 思考:编译器什么性质最重要?第二章 文法2.1 基本概念2.1.1 字母表及其运算2.1.2 字符串及其运算2.2 文法和语言2.2.1 直观概念2.2.2 定义2.2.3 相关推导2.2.4 句型与句子2.2.5 语言2.3 文法的类型2原创 2021-09-09 23:10:59 · 410 阅读 · 0 评论