课程回顾 Swarthmore学院16年开的编译系统课,总共10次大作业.本随笔记录了相关的课堂笔记以及第1次大作业. 什么是编译 编译就是执行Program->Program'转换的过程,如下图所示: 这个过程需要满足两个条件: The input and output program mean the same thing. The output is executable in a context we care about. 编译执行过程: 不可变数据结构(persistent data…
课程回顾 Swarthmore学院16年开的编译系统课,总共10次大作业.本随笔记录了相关的课堂笔记以及第2大次作业. 比较两个lists的逻辑: let rec cmp l ll = match (l,ll) with | [], [] -> 0 | [],_ -> -1 | _,[] -> 1 | (h::t), (hh::tt) -> if h > hh then 1 else if h < hh then -1 else cmp t tt;; 编程作业 1. 平…
CS144的实验就是要实现一个用户态TCP协议,对于提升C++的水平以及更加深入学习计算机网络还是有很大帮助的. 第一个Lab是环境配置和热身,环境按照文档里的配置就行了,前面两个小实验就是按照步骤来的,就不细讲了. Writing webget 这一个实验是要用他封装好的socket库写一个简单的http客户端.看看文档里Address和TCPSocket类的介绍就行了. void get_URL(const string &host, const string &path) { TCP…
课程回顾 Swarthmore学院16年开的编译系统课,总共10次大作业.本随笔记录了相关的课堂笔记以及第6次大作业. 函数声明 增加函数声明.函数调用的抽象语法:在转换成anf之前还要检查函数声明和调用是否正确. well_formed函数分别检查Program中的的函数声明列表ds和main是否有错误. well_formed_decl函数还需要检查函数体是否正确(参考下图右边第一个递归的例子). well_formed_expr函数,检查expr中调用的函数是否已经定义,接着递归调用wel…
课程回顾 Swarthmore学院16年开的编译系统课,总共10次大作业.本随笔记录了相关的课堂笔记以及第4次大作业. A-Normal Form 在80年代,函数式语言编译器主要使用Continuation-passing style(CPS)作为中间代码表示形式. 1992年Sabry和Felleisen引入了另一种和CPS一样简单的表示形式:A-normal form(ANF),并且证明了:使用ANF作为中间代码表示形式能够和使用CPS一样容易生成汇编代码并进行代码优化. Why:为什么要…
课程回顾 Swarthmore学院16年开的编译系统课,总共10次大作业.本随笔记录了inlab1的实践过程. tiny compiler 这个迷你的编译器可以将一个源文件,编译成可执行的二进制代码.它包括以下文件: 87.int:源代码只包括一个整数 87 compiler.ml:将.int的源文件编译为.s的汇编文件 open Printf let compile (program: int) : string = sprintf " section .text global our_cod…
<?php $params = require(__DIR__ . '/params.php'); $config = [ 'id' => 'basic', 'basePath' => dirname(__DIR__), 'bootstrap' => ['log'], 'components' => [ 'request' => [ // !!! insert a secret key in the following (if it is empty) - this i…
课程回顾 Swarthmore学院16年开的编译系统课,总共10次大作业.本随笔记录了相关的课堂笔记以及第9次大作业. 赋值的副作用:循环元组 下面的代码展示了Python3是如何处理循环列表(print和==): >>> x = [1, 2] >>> x[1] = x >>> print(x) [1, [...]] >>> y = [1, 2] >>> y[1] = y >>> x is y Fa…
课程回顾 Swarthmore学院16年开的编译系统课,总共10次大作业.本随笔记录了相关的课堂笔记以及第8次大作业. First-class function: It treats functions as first-class citizens. This means the language supports passing functions as arguments to other functions, returning them as the values from other…
课程回顾 Swarthmore学院16年开的编译系统课,总共10次大作业.本随笔记录了相关的课堂笔记以及第5次大作业. 增加了bool数据表示和比较运算符的支持,具体语法参考下图: 第一种int和bool数据表示的方法:用2个字来表示一个int或bool类型的值. 比如:要表示int数值,可以先存入一个flag=1,再存入具体的数值37.最后返回flag的指针,在C语言的接口做相应的处理. 第二种表示int和bool数据表示的方法:使用Tag Bit. 如下图:True表示为:0x8000000…