compiler

  • 11th December 2020

Dominator tree

Lengauer-Tarjan algorithm

…

Read more →
  • 2nd May 2015

jq实现原理——字节码

jq所用的DSL是一门dataflow language,程序中编写的几乎所有结构都是filter,函数(比如def foo(f) f;)接受filter为参数,产生filter。jq程序描述了如何把各个filter组合起来产生更复杂的filter,在执行时把输入数据(若干JSON)变换得到输出(若干JSON)。

jq独特的地方在于它的控制结构是由if和backtracking实现的。由于变量赋值后不可修改,因此迭代无法通过跳转和可变状态实现。

jq把程序编译成字节码后解释执行。字节码是栈式的(参看后缀表达式计算器、Forth),处理的值是JSON,执行时当前结果和临时变量等都存放在data stack上,并提供了很多指令用于处理data stack。下面用\(s\)表示data stack,左边是栈顶:

持续更新中

…

Read more →
  • 24th December 2014

ML编译器Caml Featherweight——概览

索引

代码

编译器的设计和实现大量参考了 @Zinc 和Caml Light 0.75,因此取名Caml Featherweight了……实现方面更接近于 @Zinc ,Caml Light有些晦涩复杂的地方我换成自己乱想的实现了。

tl;dr的话可以直接读源码:https://github.com/MaskRay/CamlFeatherweight

…

Read more →
  • 24th December 2014

ML编译器Caml Featherweight——pretty printer

Read more →
  • 24th December 2014

ML编译器Caml Featherweight——垃圾收集

Read more →
  • 24th December 2014

ML编译器Caml Featherweight——设计

编译器的设计

编译器的设计和实现大量参考了 @Zinc。

…

Read more →
  • 24th December 2014

ML编译器Caml Featherweight——数据表示

Read more →
  • 24th December 2014

ML编译器Caml Featherweight——编译

Read more →
  • 24th December 2014

ML编译器Caml Featherweight——抽象机器

Read more →