dm1299

#

[置顶] 学习笔记汇总

摘要: | 课程分类 | 课程来源 | 课程主页 | 学习笔记 | 学习进度 | 备注 | | | | | | | | | "编译原理" | Swarthmore College | "Principles of Compiler Design" | "[swarthmore cs75]" | 已完成 | 阅读全文

posted @ 2019-02-08 11:31 dm1299 阅读(630) 评论(0) 推荐(0) 编辑

2019年5月25日 #

[swarthmore cs75] Compiler 7 – Hundred Pacer

摘要: 课程回顾 Swarthmore学院16年开的编译系统课,总共10次大作业。本随笔记录了相关的课堂笔记以及第10次大作业。 mutable/immutable variables types optimization register allocation opam install ocamlgrap 阅读全文

posted @ 2019-05-25 22:09 dm1299 阅读(200) 评论(0) 推荐(0) 编辑

2019年4月19日 #

[swarthmore cs75] Compiler 6 – Garbage Snake

摘要: 课程回顾 Swarthmore学院16年开的编译系统课,总共10次大作业。本随笔记录了相关的课堂笔记以及第9次大作业。 赋值的副作用:循环元组 下面的代码展示了Python3是如何处理循环列表(print和==): 内存管理(Memory Management):维护一个free list数据结构, 阅读全文

posted @ 2019-04-19 21:37 dm1299 阅读(234) 评论(0) 推荐(0) 编辑

2019年3月28日 #

[swarthmore cs75] Compiler 6 – Fer-de-lance

摘要: 课程回顾 Swarthmore学院16年开的编译系统课,总共10次大作业。本随笔记录了相关的课堂笔记以及第8次大作业。 First class function: It treats functions as first class citizens. This means the language 阅读全文

posted @ 2019-03-28 13:33 dm1299 阅读(239) 评论(0) 推荐(0) 编辑

2019年3月17日 #

[swarthmore cs75] Compiler 5 – Egg-eater

摘要: 课程回顾 Swarthmore学院16年开的编译系统课,总共10次大作业。本随笔记录了相关的课堂笔记以及第7次大作业。 抽象语法: 存储方式: + 栈中的数据如果最后三位(tag bits)是001表示元组。 + 堆中元组的起始地址最后三位都是000。 + 通过引入ESI寄存器可以实现堆区数据的存取 阅读全文

posted @ 2019-03-17 23:43 dm1299 阅读(197) 评论(0) 推荐(0) 编辑

2019年3月8日 #

[swarthmore cs75] Compiler 4 – Diamondback

摘要: 课程回顾 Swarthmore学院16年开的编译系统课,总共10次大作业。本随笔记录了相关的课堂笔记以及第6次大作业。 函数声明 增加函数声明、函数调用的抽象语法;在转换成anf之前还要检查函数声明和调用是否正确。 well_formed函数分别检查Program中的的函数声明列表ds和main是否 阅读全文

posted @ 2019-03-08 21:55 dm1299 阅读(214) 评论(0) 推荐(0) 编辑

2019年2月14日 #

[swarthmore cs75] Compiler 3 – Cobra

摘要: 课程回顾 Swarthmore学院16年开的编译系统课,总共10次大作业。本随笔记录了相关的课堂笔记以及第5次大作业。 增加了bool数据表示和比较运算符的支持,具体语法参考下图: 第一种int和bool数据表示的方法:用2个字来表示一个int或bool类型的值。 比如:要表示int数值,可以先存入 阅读全文

posted @ 2019-02-14 19:46 dm1299 阅读(138) 评论(0) 推荐(0) 编辑

2019年2月12日 #

[swarthmore cs75] Compiler 2 – Boa

摘要: 课程回顾 Swarthmore学院16年开的编译系统课,总共10次大作业。本随笔记录了相关的课堂笔记以及第4次大作业。 A Normal Form 在80年代,函数式语言编译器主要使用Continuation passing style(CPS)作为中间代码表示形式。 1992年Sabry和Fell 阅读全文

posted @ 2019-02-12 10:25 dm1299 阅读(227) 评论(0) 推荐(0) 编辑

2019年2月8日 #

[swarthmore cs75] Compiler 1 – Adder

摘要: 课程回顾 Swarthmore学院16年开的编译系统课,总共10次大作业。本随笔记录了相关的课堂笔记以及第3次大作业。 编译的过程:首先解析(parse)源代码,然后成抽象语法树(AST),再生成汇编代码(asm),最后用asm生成的目标文件(object)和其他库文件链接成一个可执行的二进制文件( 阅读全文

posted @ 2019-02-08 09:49 dm1299 阅读(240) 评论(0) 推荐(0) 编辑

2019年2月5日 #

[swarthmore cs75] inlab1 — Tiny Compiler

摘要: 课程回顾 Swarthmore学院16年开的编译系统课,总共10次大作业。本随笔记录了inlab1的实践过程。 tiny compiler 这个迷你的编译器可以将一个源文件,编译成可执行的二进制代码。它包括以下文件: 87.int:源代码只包括一个整数 compiler.ml:将.int的源文件编译 阅读全文

posted @ 2019-02-05 03:51 dm1299 阅读(237) 评论(0) 推荐(0) 编辑

2019年2月4日 #

[swarthmore cs75] Lab 1 — OCaml Tree Programming

摘要: 课程回顾 Swarthmore学院16年开的编译系统课,总共10次大作业。本随笔记录了相关的课堂笔记以及第2大次作业。 比较两个lists的逻辑: ocaml type ('k, 'v) avlnode = | Leaf | Node of int 'k 'v ('k, 'v) avlnode (' 阅读全文

posted @ 2019-02-04 04:39 dm1299 阅读(218) 评论(0) 推荐(0) 编辑

2019年2月3日 #

[swarthmore cs75] Lab 0 Warmup & Basic OCaml

摘要: 课程回顾 Swarthmore学院16年开的编译系统课,总共10次大作业。本随笔记录了相关的课堂笔记以及第1次大作业。 什么是编译 编译就是执行Program Program'转换的过程,如下图所示: 这个过程需要满足两个条件: 1. The input and output program mea 阅读全文

posted @ 2019-02-03 02:23 dm1299 阅读(194) 评论(0) 推荐(0) 编辑

导航