摘要:课程回顾 Swarthmore学院16年开的编译系统课,总共10次大作业。本随笔记录了相关的课堂笔记以及第10次大作业。 mutable/immutable variables types optimization register allocation opam install ocamlgrap
阅读全文
摘要:课程回顾 Swarthmore学院16年开的编译系统课,总共10次大作业。本随笔记录了相关的课堂笔记以及第9次大作业。 赋值的副作用:循环元组 下面的代码展示了Python3是如何处理循环列表(print和==): 内存管理(Memory Management):维护一个free list数据结构,
阅读全文
摘要:课程回顾 Swarthmore学院16年开的编译系统课,总共10次大作业。本随笔记录了相关的课堂笔记以及第8次大作业。 First class function: It treats functions as first class citizens. This means the language
阅读全文
摘要:课程回顾 Swarthmore学院16年开的编译系统课,总共10次大作业。本随笔记录了相关的课堂笔记以及第7次大作业。 抽象语法: 存储方式: + 栈中的数据如果最后三位(tag bits)是001表示元组。 + 堆中元组的起始地址最后三位都是000。 + 通过引入ESI寄存器可以实现堆区数据的存取
阅读全文
摘要:课程回顾 Swarthmore学院16年开的编译系统课,总共10次大作业。本随笔记录了相关的课堂笔记以及第6次大作业。 函数声明 增加函数声明、函数调用的抽象语法;在转换成anf之前还要检查函数声明和调用是否正确。 well_formed函数分别检查Program中的的函数声明列表ds和main是否
阅读全文
摘要:课程回顾 Swarthmore学院16年开的编译系统课,总共10次大作业。本随笔记录了相关的课堂笔记以及第5次大作业。 增加了bool数据表示和比较运算符的支持,具体语法参考下图: 第一种int和bool数据表示的方法:用2个字来表示一个int或bool类型的值。 比如:要表示int数值,可以先存入
阅读全文
摘要:课程回顾 Swarthmore学院16年开的编译系统课,总共10次大作业。本随笔记录了相关的课堂笔记以及第4次大作业。 A Normal Form 在80年代,函数式语言编译器主要使用Continuation passing style(CPS)作为中间代码表示形式。 1992年Sabry和Fell
阅读全文
摘要:课程回顾 Swarthmore学院16年开的编译系统课,总共10次大作业。本随笔记录了相关的课堂笔记以及第3次大作业。 编译的过程:首先解析(parse)源代码,然后成抽象语法树(AST),再生成汇编代码(asm),最后用asm生成的目标文件(object)和其他库文件链接成一个可执行的二进制文件(
阅读全文
摘要:课程回顾 Swarthmore学院16年开的编译系统课,总共10次大作业。本随笔记录了inlab1的实践过程。 tiny compiler 这个迷你的编译器可以将一个源文件,编译成可执行的二进制代码。它包括以下文件: 87.int:源代码只包括一个整数 compiler.ml:将.int的源文件编译
阅读全文
摘要:课程回顾 Swarthmore学院16年开的编译系统课,总共10次大作业。本随笔记录了相关的课堂笔记以及第2大次作业。 比较两个lists的逻辑: ocaml type ('k, 'v) avlnode = | Leaf | Node of int 'k 'v ('k, 'v) avlnode ('
阅读全文
摘要:课程回顾 Swarthmore学院16年开的编译系统课,总共10次大作业。本随笔记录了相关的课堂笔记以及第1次大作业。 什么是编译 编译就是执行Program Program'转换的过程,如下图所示: 这个过程需要满足两个条件: 1. The input and output program mea
阅读全文