当前位置:  开发笔记 > 编程语言 > 正文

如何在C中编译编译器?

如何解决《如何在C中编译编译器?》经验,为你挑选了1个好方法。

我用C编写了一个编译器,我已经阅读了龙书中有关编译器的所有内容.但我发现它很难实现,而且我不知道从哪里开始.即使涉及词法分析器部分,也希望在编写代码的基础上逐步了解C语言编写器!

你建议我接下来做什么?



1> Ian G..:

您可以在C中查看Appel的现代编译器实现.

通过它的声音你需要弄清楚你想要编译的语言:你想要一个C语言的子集或者像Scheme那样易于解析的语言,还是只需要算术表达式语言?

选择/设计一种语言,在其中编写几个非常小的程序,为其中的一部分编写词法分析器/解析器,然后返回以使部件工作(可能解释为启动 - 这样就可以看到它正在运行)然后迭代看起来很有趣的块,构建完整的语言.

根据提供的额外细节进行编辑

"我想制作一套超级c,比如实现python的各种优点,但保持它像c一样简单"

我不确定我是通过亲手写一切来做到的,但如果我做了......

我会用混合语言写出一些我想要最终得到的程序:所以如果你想要C和Python一样的列表理解那么可能

void main()
{
    int[] x = {1,2,3,4,5};
    int[] y = {i*i for i in x where i % 2 == 0};
    for (int i in y) { printf("%d", i); }
}

[C样式数组包括上面隐含的计数作为读者的练习:-)!]

然后得到一个绝对最小的C程序工作,你好世界甚至只是静态添加一些数字(如果它是你好世界我甚至可能从特殊的外壳printf开始,所以我没有必要解析stdio.h - 如果你正朝着一个C-Python混合,你可能最终保持这一点).一旦你能做到

void main() 
{
    int x = 0; 
    int y; 
    y = 5; 
    x + y;
}

您可以开始添加复杂性:任意函数定义和调用,更多运算符,返回值,数组,数据结构,const,指针,......逐步构建最简单的示例程序.

从C子集开始的优点是你有很多C编译器,你可以看看你的想法,所以你得到了例如TinyCC所以当你遇到添加python-esque片段的困难时,你有一个坚实的基础.

这是在漫长的道路上滑过很多细节.祝好运.


所以,你想建立一个Jumbo Jet,只有更大更好,只使用基本Meccano设置的部分?
推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有