hi,各位新年快乐~拜个晚年 大概前年底的时候,开始想往自制的os tinix里移植一个编译器,构建一个传说中的os生态,哈哈 于是看雪上面找来luocong大神的lcc源码进行研究,改着改着发现要移植是不可能的事情。 但是研究的过程中发现了lcc源码的不少问题,也有了一些功能改进想法和研究兴趣,顺便也想了解下编译原理这门学科。慢慢的做了好多现在看来很2的修改。 也许可以改进成一个不错的脚本解释器,发出来大家一起研究学习下 luocong大神的lcc在这个帖子上 http://bbs.pediy.com/showthread.php?t=149966 分发遵循BSD协议,有改进也可以共享下 做了很多修改,大多是为了实现A功能首先得实现B功能,实现期间发现,干脆再实现个C功能...... 由于是很早以前改的,忘了很多,印象里做了以下几点修改: 1,修复部分语法解析上的bug,不赘述,可通过查看两份代码区别来确认。 2,新增一部分语法支持,如取地址符,指针符,全局变量等。这部分主要实现在,虚拟机指令的修改,代码生成时全局内存分配的修改。 3,为虚拟机添加调试功能 启动时-d参数将进入调试模式,调试器将停在第一条虚拟指令li_i指令上 断点功能(支持符号)及调用栈查看、内存查看等功能 4,可变参数调用约定的支持 5,define宏的简单支持 如
#define MUL(_a,_b,_c) ((_a)*(_b)*(_c))
#define CRT_LIB_NAME "msvcr90.dll" #define malloc(_size) cdecl_wrapper(CRT_LIB_NAME, "malloc", _size)
cdecl_wrapper("msvcr90.dll", "malloc", 100)
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!