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

InnerC  用于 ILBC,   我现在把它独立一个版本出来,   项目地址:

https://github.com/kelin-xycs/InnerC              ,

InnerC 是一个   C 语言 编译器,  最初的 目的 是 作为  ILBC  的  中间语言 编译器  用于编译 C 中间语言  。

有关 ILBC ,   见 《ILBC 规范》   https://www.cnblogs.com/KSongKing/p/10354824.html        。

目前 InnerC 已实现的部分 只包含 语法分析 和 语法检查, 不包含 生成目标代码 和 链接  。

目前 InnerC 支持     全局变量 函数 结构体 数组 指针 函数指针, int float char ,     四则运算, 大于小于不等于 比较, 与或非逻辑运算,

if 语句, while 语句,  不支持 for 语句, 主要是 懒得写了,烦  。  以后可以加上  。

支持 return break continue  语句  。

支持 作用域,  比如 函数体 是一个 作用域, 函数形参 是一个 作用域,  if 子句 和 while 子句(循环体) 是 一个 作用域  。

不支持 ++  --  +=  -=,    也是 没时间写 。 以后可以加上  。

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

时间: 2024-10-10 00:49:15

自己写一个 C 语言 编译器 InnerC的相关文章

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

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

第一个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

本文是 VMBC / D#  项目 的 系列文章, 有关 VMBC / D# ,  见 <我发起并创立了一个 VMBC 的 子项目 D#>(以下简称 <D#>)  https://www.cnblogs.com/KSongKing/p/10348190.html    . VMBC  需要一个 内置 的  C 编译器,   想来想去, 觉得还是自己写一个, 计划用  C 语言 写,  因为 VMBC 的  C 编译器 要求是一个 本地库,  如果不要求是 本地库,  我就用 C#

写一个c语言程序

在Mac系统环境下编写第一个C语言程序,最后把程序运行起来,跟计算机做一个小小的互动 一.编写第一个C语言程序-Hello World 为什么称第一个程序为“Hello Wolrd”呢?其实计算机行业里面,学习任何技术的第一个程序都可以称为“Hello World”.“Hello World”的字面意思是“你好,世界”,也就是跟世界打招呼.我们第一个程序在这世界上诞生了,那肯定要跟世界打声招呼嘛,所以就称为“Hello World”. 1.用什么工具写代码 首先我们要做的肯定是写代码,在代码里面

AQL Subset Compiler:手把手教你如何写一个完整的编译器

项目地址(由于课程TA要求,代码地址在deadline后贴出,请见谅.) 转载请注明出处. 前言 这是学校里编译原理课程的大作业,此Project十分适合编译原理的学习,让基本不听课的我理解了一个编译器的编写过程. 所以忍不住想分享一下. 什么是AQL? 全称: Annotation Query Language 用于Text Analytics. 可以从非结构化或半结构化的文本中提取结构化信息的语言. 语法与SQL类似. 什么是AQL Subset? AQL语法复杂,功能强大,实现难度较高,作

王垠:怎样写一个解释器

卖了好久关子了,说要写一个程序语言理论的入门读物,可是一直没有下笔.终于狠下心来兑现一部分承诺.今天就从解释器讲起吧. 解释器是比较深入的内容.虽然我试图从最基本的原理讲起,尽量让这篇文章不依赖于其它的知识,但是这篇教程并不是针对函数式编程的入门,所以我假设 你已经学会了最基本的 Scheme 和函数式编程.如果你完全不了解这些,可以读一下< SICP | 计算机程序的构造和解释> 的第一,二章.当然你也可以继续读这篇文章,有不懂的地方再去查资料.我在这里也会讲递归和模式匹配的原理.如果你已经

C语言编译器为什么能够用C语言编写?

不知道大家有没有想过一个问题:C语言编译器为什么能够用C语言编写? 所谓C语言编译器,就是把编程得到的文件,比如.c,.h的文件,进行读取,并对内容进行分析,按照C语言的规则,将其转换成cpu可以执行的二进制文件. 在学习C/C++或者想要学习C/C++可以加入我们的学习交流QQ群: 954607083 ,领取学习资料 其本质在于对文件的读入,分析,及处理.这些操作,C语言都是可以实现的. 所以用C语言来做C语言的编译器是完全可行的. 但是,历史上的第一个C语言编译器,肯定不是C语言写的,因为在

案例实战之如何写一个webpack loader

通过以下几个实例掌握webpack loader的写法 1.写一个多语言替换的loader 在index.js在页面上插入了一个{{title}}文本,我们需要在打包的时候将其替换成对应的多语言 function component() { let element = document.createElement('div') let str = 'hello webpack loader <h1>{{title}}</h1>' element.innerHTML = str el