首页 > TAG信息列表 > 青木

自制编译器 青木峰郎 笔记 Ch15 编译表达式和语句

15.1 确认编译结果 cbc --print-asm -fverbose-asm xx.cb可以看到汇编代码。gcc -S -o - xx.c也可以。 root@cf43f429204e:/# cbc --print-asm -fverbose-asm if_test.cb .file "if_test.cb" .section .rodata .LC0: .string "OK" .LC1: .string "NO" .LC2: .

自制编译器 青木峰郎 笔记 Ch12 x86架构的概要

12.2 x86系列的CPU历史 遵循同一指令集架构的CPU应该能够执行依据该指令集架构编译的程序 MMX指令用于整数并行处理,SSE用于浮点数并行处理 AMD先于Intel提出了x86系列的64位扩展,其指令集架构称为AMD64,之后Intel提出了自己的Intel64,AMD64和Intel64合称为x86-64。此外,Intel还和HP一

自制编译器 青木峰郎 笔记 Ch11 IR转换

11.1 IR Cb使用的是树形IR。 cbc --dump-ir if_test.cb <<IR>> (if_test.cb:1) variables: functions: <<DefinedFunction>> (if_test.cb:2) name: main isPrivate: false type: int(int, char**) body: <<CJump>>

自制编译器 青木峰郎 笔记 Ch10 语义分析(2) 静态类型检查

10.1 类型定义检查 主要解决: 包含void的数组,结构体,联合体 成员重复的结构,联合体 循环定义的结构,联合体-需要检查有没有引用闭环 class TypeChecker extends Visitor { private final TypeTable typeTable; private final ErrorHandler errorHandler; // #@@range/

自制编译器 青木峰郎 笔记 Ch7 JavaCC的action和AST

7.1 JavaCC中的Action javacc的规则中可以声明,定义,计算和返回变量。 返回的语义值类型 非终端符号名 参数列表 { 临时变量声明 } { 规则{action} } e.g: // #@@range/defstruct{ //设置返回类型为StructNode StructNode defstruct(): { //声明临时变量 Token t;

自制编译器 青木峰郎 笔记 Ch6 语法分析

6.1 定义的分析 表示程序整体 compilation_unit(): {} { import_stmts() top_defs() <EOF> } import import_stmts(): {} { (import_stmt())* } import_stmt():{} { <IMPORT> name() ("." name())* ";" } //用于特殊处理包名 name() {

自制编译器 青木峰郎 笔记 Ch3 词法分析的概要

3.1 语法分析的概要 解析器往往会跳过分号和括号等没有必要保存的元素,所以parser一般生成的语法树已经不再严格对应代码本身 3.2 解析器生成器 常用的解析器一般使用LR, LALR和LL文法。速度上: LL>LALR>LR,解析范围上: LL<LALR<LR。目前最主流的是LALR(yacc),本文使用LL文法(javacc)