chlang 初版

关于chlang 这是个玩具解释器,通过完成它学习了许多关于编译器前端的知识点 github地址 本来这是个c语言项目,由于c语言实现实在过于繁琐,遂弃坑转为java,采用maven的项目管理结构 本语言主要参考了《自制编程语言》、c4的源代码 本文更新于2017.06.21 词法分析 词法分析器所在代码 主要有三个java文件构成,不讲一些自动机相关知识,默认已知 TOKEN_TYPE.java 主要描述符号类型,带有RW开头的表示Reserved Word,也就是保留关键词 »

extern c

函数签名 Function Signature,函数签名包含了一个函数的信息,包括函数名、它的参数类型、它所在的类和名称空间及其他信息。 编译过程中,编译器(或者链接器)处理符号时,他们使用某种名称修饰的方法,使得每个函数签名对应一个修饰后名称(Decorated Name)。 (内容主要摘抄《程序员的自我修养》) 以下表格是c++代码编译过后在gcc编译器下的符号名 函数签名 修饰后名称(符号名) int func(float) _Z4funcf »

编译clang

环境 windows10 vs2015update3 community版 cmake3.7.2 Python 3.5.3 GnuWin32 tools llvm4.0源码 安装过程 首先安装vs2015updaate3 community版,双击iso镜像文件,win10系统自动挂载,在虚拟镜像里面双击vs_community.exe,选择默认安装即可 python、cmake安装过程比较简单, »

c语言内存分配

背景 网上的关于c语言内存分配的文章满天飞,先随便荡一份事例,但是从不同的角度讲一下这个案例 对于下面的代码生成的程序,基本采用如下命令反编译 objdump -M intel -s -d -x main.o | objdump -s -x -d -M intel a.out | nl -ba -M intel »

js 四则运算解释器

流程 词法分析 这里不讲那么复杂的正则表达式、DFA和NFA(后面的blog再介绍),或者各种证明啥的. 毕竟我们只需要写一个四则运算的解析器 我们的要写的东西,会不断地匹配输入的每一个字符流 而我们输入的字符流类型分为几种: '+', '-', '*', '/'和数字 将其转化为token流,由于js动态语言的灵活和我们程序很简单 我们只需要用变量token就可以存下来字符流的信息,无需为token定义一个复杂的类 详见next()函数中,对每一个类型的取值   语法分析 BNF范式 »