我发起并创立了一个 C 语言编译器 开源项目 InnerC

本文是 VMBC / D#  项目 的 系列文章,

有关 VMBC / D# ,  见 《我发起并创立了一个 VMBC 的 子项目 D#》(以下简称 《D#》)  https://www.cnblogs.com/KSongKing/p/10348190.html    。

VMBC  需要一个 内置 的  C 编译器,   想来想去, 觉得还是自己写一个,

计划用  C 语言 写,  因为 VMBC 的  C 编译器 要求是一个 本地库,  如果不要求是 本地库,  我就用 C# 写了, 呵呵呵 。

为什么 是 库 呢 ?   因为这是一个 内置编译器,  是由  ILBC 运行时 来 调用的 (ILBC 见 《D#》),  所以 是一个 库  。

这个 库  最好 能 尽可能的  小 。

C 语言 写的 代码 是 最贴近 底层(汇编) 的,  所以  C 语言 写的 库 应该是 最紧凑 的, 所以用  C 语言 来写 。

还有一个 原因 是, 我会的 语言 不多,  C 算是 相对 更熟一点的,    So  。

有 网友 说 C 语言 不适合 写 编译器, C 的抽象太低了,  建议用 函数式 语言写,

又举例    Rust  最早是用  OCaml  写的,   然后又用 Rust 写了一遍  。

好吧,   但  Rust 、OCaml   这些语言 的 名字 我都 没怎么听过,   还是用 C 吧  。

另外用  C  的话, 应该不用担心 操作系统 的 支持 的 问题  。

这个 项目 我只 实现    语法分析   和   类型检查    的 部分,      语法分析 包含了 语法检查  。

生成目标代码     链接(链接外部库)  这  2 个 部分   大家 如果有兴趣, 对 汇编 和 操作系统 了解 的话, 可以来补充 。

原文地址:https://www.cnblogs.com/KSongKing/p/10352273.html

时间: 2024-11-09 12:46:27

我发起并创立了一个 C 语言编译器 开源项目 InnerC的相关文章

我发起并创立了一个 VMBC 的 子项目 D#

大家好, 我发起并创立了一个 VMBC 的 子项目 D#  . 有关 VMBC ,  请参考 <我发起了一个 用 C 语言 作为 中间语言 的 编译器 项目 VMBC>     https://www.cnblogs.com/KSongKing/p/9628981.html , D# ,  就是一个 简单版 的 C#  . 下面说一下 D#  项目 的 大概规划 : 第 1 期,  实现 new 对象 的 机制,  GC,  堆  .      (我做) 第 2 期,  实现 对象 的 函数(

第一个C语言编译器是怎样编写的?

首先向C语言之父Dennis MacAlistair Ritchie致敬! 当今几乎所有的实用的编译器/解释器(以下统称编译器)都是用C语言编写的,有一些语言比如Clojure,Jython等是基于JVM或者说是用Java实现的,IronPython等是基于.NET实现的,但是Java和C#等本身也要依靠C/C++来实现,等于是间接调用了调用了C.所以衡量某种高级语言的可移植性其实就是在讨论ANSI/ISO C的移植性. C语言是很低级的语言,很多方面都近似于汇编语言,在<Intel32位汇编语

你知道第一个 C 语言编译器是如何编写的吗?

C语言是很低级的语言,很多方面都近似于汇编语言,在<Intel 32位汇编语言程序设计>一书中,甚至介绍了手工把简单的C语言翻译成汇编的方法.对于编译器这种系统软件,用C语言来编写是很自然不过的,即使是像Python这样的高级语言依然在底层依赖于C语言(举Python的例子是因为Intel的黑客正在尝试让Python不需要操作系统就能运行--实际上是免去了BIOS上的一次性C代码).现在的学生,学过编译原理后,只要有点编程能力的都可以实现一个功能简单的类C语言编译器. 可是问题来了,不知道你有

自己写一个 C 语言 编译器 InnerC

InnerC  用于 ILBC,   我现在把它独立一个版本出来,   项目地址: https://github.com/kelin-xycs/InnerC              , InnerC 是一个   C 语言 编译器,  最初的 目的 是 作为  ILBC  的  中间语言 编译器  用于编译 C 中间语言  . 有关 ILBC ,   见 <ILBC 规范>   https://www.cnblogs.com/KSongKing/p/10354824.html        .

准备开一个地图SDK的开源项目

最近有点空闲时间了, 准备开一个地图SDK的开源项目, 现在的地图SDK已经有很多了, 再做一个跟重新发明个轮子差不多, 但还想做的原因是想在别的轮子的基础上造个轮子... 初步设想是基于开源的地图渲染引擎tangram-es进行二次开发, 使用Qt5.7进行二次封装, 提供QWidget和QML两种接口 项目地址: https://github.com/tiangles/ltdmap 支持平台: linux gcc 32/64 bits, arm/x86, 未来打算移植到QNX和win32,

【转】写一个C语言编译器 : BabyC

[转载]此文是转载,方便以后读与学习. 原文链接:http://blog.jobbole.com/77305/ 动手编写一个编译器,学习一下较为底层的编程方式,是一种学习计算机到底是如何工作的非常有效方法. 编译器通常被看作是十分复杂的工程.事实上,编写一个产品级的编译器也确实是一个庞大的任务.但是写一个小巧可用的编译器却不是这么困难. 秘诀就是首先去找到一个最小的可用工程,然后把你想要的特性添加进去.这个方法也是Abdulaziz Ghuloum在他那篇著名的论文“一种构造编译器的捷径”里所提

一个P2P点播直播开源项目:P2PCenter

最近跟着公司的项目走,我也研究了不少东西,尤其是在P2P方面,广泛涉猎各种开源项目,尤其是国外的开源项目,意外的发现了一个国内的项目,做的还不错,推荐一下.---------------------使用平台:客户端:Windows 平台服务器:Windows & Linux框架图例: 项目简介: P2P点播直播开源项目是一个由Kevin发起,多人参与开发并不断更新,符合GPL开源协议的开源项目. 项目成员: 系统架构及初期开发: 符文科(Kevin), 马军(Mark), 张威, 高成, 王亮 

第一个Android TV Launcher开源项目

Android TV Launcher开源项目 这个项目是机顶盒桌面,用来播放视频.显示图片.应用管理和其他针对机顶盒产品的设置.目前git和CSDN code上面都没有类似的开源项目,正好本人最近在开发类似产品,网上类似研究还非常少,完全自己实现还是比较困难.所以就把目前的项目开源出来,也有利于其他人少走弯路. git项目地址 CSDN code项目地址 项目框架结构 UI.adapter.实体类.图片cache.网络层. 这个层级关系还是和大部分项目是类似的. 功能模块的详细实现方式 这个部

第一个C语言的小项目

这里先写下主要的业务代码,一些库代码稍后补充上 /** * Feed新闻个性化推送 */ #include "push_service_news.h" /** * 保证单进程运行 */ void single_process() { lock_fd = open("logs/lock", O_CREAT | O_RDWR | O_TRUNC, 00664); if (push_trylock_fd(lock_fd) == FAILURE) { push_sys_no