编译器源码
知语言
热爱中文编程
展开
-
TCC(TinyC)编译器汉化(中文编译器、汉语编程)之九:核心库源码
hexinku.c核心库源码如下:/* * 核心库:hexinku.c生成hexinku.dll。此文件只在zhi.c第11行一个文件中引用,是知语言的基本库。 * 使用hexinku.c,您可以将ZHI用作动态代码生成的后端 */#如果 !已定义 是_源文件 || 是_源文件#导入 "词法分析.c"#导入 "语法分析.c"#导入 "ELF文件处理.c"#导入 "run开关.c"#如果已定义 ZHI_TARGET_I386#导入 "i386-gen.c"#导入 "i386-link原创 2020-11-25 21:50:47 · 1371 阅读 · 0 评论 -
TCC(TinyC)编译器汉化(中文编译器、汉语编程)之八:汇编处理
汇编处理源码如下:/* * GAS之类的ZHI汇编程序 */#定义 全局_使用#导入 "zhi.h"#如果已定义 配置_ZHI_汇编静态 段 *最后_代码_段; /* 处理.previous asm指令 */静态_函数 整数型 汇编_获取_局部_标签_名称(知心状态机 *状态机1, 无符号 整数型 n){ 字符型 buf[64]; 单词存储结构 *ts; snprintf(buf, 取大小(buf), "L..%u", n); ts = 单词表_查原创 2020-11-25 21:47:59 · 1015 阅读 · 0 评论 -
TCC(TinyC)编译器汉化(中文编译器、汉语编程)之七:中间语言生成器
中间语言生成器源码如下:/* * ZHI的CIL(Common Intermediate Language:通用中间语言)代码生成器 */#error 自2003年以来,此代码已被破坏/* 可用寄存器数 */#定义 可用_寄存器数 3/* 一个寄存器可以属于几个类。 这些类必须从更一般的类到更精确的类进行排序(请参见gv2()代码进行假设)。 */#定义 寄存器类_堆栈 0x0001 /* 任何堆栈条目 */#定义 寄存器类_堆栈0 0x0原创 2020-11-25 21:45:56 · 722 阅读 · 0 评论 -
TCC(TinyC)编译器汉化(中文编译器、汉语编程)之六:中间操作码
中间操作码源码如下:/* * CIL操作码定义 * CIL一般指通用中间语言。通用中间语言(Common Intermediate Language,简称CIL) */操作码(NOP, "nop", 0x00)操作码(BREAK, "跳出", 0x01) //向公共语言结构 (CLI) 发出信号以通知调试器已撞上了一个断点。操作码(LDARG_0, "ldarg.0", 0x02) //将索引为 0 的参数加载到计算堆栈上。操作码(LDARG_1, "ldarg.1", 0x0原创 2020-11-25 21:44:31 · 827 阅读 · 0 评论 -
TCC(TinyC)编译器汉化(中文编译器、汉语编程)之五:语法分析下
语法分析下半部分源码如下: 分支 符_REGPARM1: 分支 符_REGPARM2: 跳过('('); n = 表达式_常量(); 如果 (n > 3) n = 3; 否则 如果 (n < 0) n = 0; 如果 (n > 0) ad-&g原创 2020-11-25 21:32:32 · 1146 阅读 · 0 评论 -
TCC(TinyC)编译器汉化(中文编译器、汉语编程)之四:语法分析上
语法分析代码过长,由于单篇博文字数限制,现将语法分析源码分为上下两篇语法分析.c/* * 语法分析:递归下降式语法制导,单趟编译 */#定义 全局_使用#导入 "zhi.h"/********************************************************//* 全局变量 */静态_外部 整数型 返回符号, 匿名符号索引, 输出代码索引, 局部变量索引;静态_外部 符号 *全局符号_堆栈;/*主要的符号堆栈:用于全局变量,函数和类型。*/静态_外部 符号原创 2020-11-25 21:29:56 · 2587 阅读 · 0 评论 -
TCC(TinyC)编译器汉化(中文编译器、汉语编程)之三:词法分析
词法分析.h 源码如下:/* * 功能:预处理,词法分析 * 只在hexinku.c第7行一个地方引用 */#定义 全局_使用#导入 "zhi.h"/********************************************************//* 全局变量 */静态_外部 整数型 标识符_标记;静态_外部 整数型 解析_标记;静态_外部 结构体 缓冲文件 *file;静态_外部 整数型 当前取到的源码字符, 单词编码;静态_外部 恒定值 单词值;静原创 2020-11-25 21:18:53 · 1144 阅读 · 0 评论 -
TCC(TinyC)编译器汉化(中文编译器、汉语编程)之二:字符(token)汉化
汉化了所有的C语言关键词字符.h源码如下:/* keywords */ 字符(关键字_无类型, "无类型") 字符(关键字_VOID, "void") 字符(关键字_整数型, "整数型") 字符(关键字_INT, "int") 字符(关键字_长整数型, "长整数型") 字符(关键字_LONG, "long") 字符(关键字_短整数型, "短整数型") 字符(关键字_SHORT, "short") 字符(关键字_字符型, "字符型")原创 2020-11-25 21:13:51 · 796 阅读 · 0 评论 -
TCC(TinyC)编译器汉化(中文编译器、汉语编程)之一:主文件汉化
一直想学习编译器,偶然的机会接触到TCC(TinyC)编译器源码。分析源代码是学习一个项目的最好的学习途径之一。自己最爱的母语—中文(汉语或华语)竟然没有一个编译器。果断自己汉化一个。现将汉化源码分享出来。可以实现编译器自举(自我迭代)。特别声明:本编译器基于tcc(TCC - Tiny C Compiler。 Copyright © 2001-2004 Fabrice Bellard)优化汉化。zhi.c完整源码如下:#导入 "zhi.h"#如果 是_源文件# 导入 "hexinku.c"#结原创 2020-11-25 21:08:56 · 4743 阅读 · 2 评论