精华内容
下载资源
问答
  • 本文转载 ... 关于编译器的图书资料汇总,可以参考《a list of compiler books — 汗牛充栋的编译器参考资料》。 ...工作如果是和编译器相关的或者编译器...我也了一些调研,分享如下: How to write your own

    本文转载

    原文地址:http://www.lingcc.com/2009/12/22/10404/


    关于编译器的图书资料汇总,可以参考《a list of compiler books — 汗牛充栋的编译器参考资料》。

    工作如果是和编译器相关的或者编译器爱好者们,谁没有点冲动想自己写个编译器出来。

    我也做了一些调研,分享如下:

    –介绍如何使用JAVA语言完成一个面向LLVM后端的编译器,以mjava作为目标语言,这是JAVA语言的一个子集。包括词法分析,语法分析,错误控制,符号表管理,类型检查等部分

    –采用一种逐步增加功能的方式构造编译器,作者的文章写的很深入前出(我只看了abstract和introduction部分)

    –作者从1988-1995年用了7年的时间完成了这份介绍。没有使用flex和yacc这些东西,纯手工制作。使用pascal语言写出的编译器。是一位学物理的博士,很是钦佩!

    MIT OCW 6.035 Computer Language EngineeringMIT关于计算机工程的开放课程,使用JAVA语言创建一个完整的Decaf语言编译器。我也曾看过一点,但这门课的实验要求有MIT的环境,还有一些库什么的。外面的人拿不到,所以没办法,只能作参考了。

    –编译器课程,使用C++实现一个Cool(Classroom Object-Oriented Language)语言编译器.也是因为没有缓环境和库,只能作罢。

    – 很有特色的一门课,也是使用C++实现COOL语言的编译器,但将LLVM融入进来,前端输出中间表示到LLVM,在作一些后端的实验。另外UIUC还有一门高级的编译器课程,是使用JAVA语言来编写。重要的是这个CS426 能够下到所有课程的资料,包括源码。 感兴趣的朋友可以试试。

    – 这个系列的文章主张使用现有的工具体验如何实现编译器。注重快速高效的实现,主要关注前端。有兴趣了解和学习LLVM 中间表示和工作机制的朋友不要错过。

    还有如下的参考资料(¶ Link to a PDF, $ Link to a printed book):

    两个新闻组,可以上去请教问题:

    想起某人在饭桌上曾经的感慨,I have a dream…..
    一直以来,都觉得编译器高深莫测。做个编译器出来,或许很难,但做了可能就不能。 可能是勇气不足。再等等吧,总有一天我要把它实现!。。。。。。。


    展开全文
  • 编译器

    2017-08-09 20:21:14
    现阶段我们使用的开发工具,多是集成好的,即IDE。常见的IDE有Microsoft Visual Studio,Dev-C++,C++Builder,Emacs + GCC,Eclipse+CDT。...实际上初学者根本不需要这么复杂的编译器,但是对于编译器的原理

    现阶段我们使用的开发工具,多是集成好的,即IDE。常见的IDE有Microsoft Visual Studio,Dev-C++,C++Builder,Emacs + GCC,Eclipse+CDT。IDE环境,集编辑、编译、调试于一身,还有很多相应的拓展工具,这是为了开发人员使用上能够很方便,以至于他们把更多的精力放在项目本身的技术实现上。实际上初学者根本不需要这么复杂的编译器,但是对于编译器的原理又不懂,所以只能使用大型的IDE编写a+b的小程序。
    编程的核心是编译器,IDE是需要配置编译器的,以下我们讲下主流的编译器

    C++编译器

    1.Visual C++:Windows平台上最流行的编译器,和VS集成的很好,编译效率和编译后的代码效率都不错 
    
    2.GCC/G++:开源的,Linux/Unix平台上的首选,而且支持N中硬件平台,如果想进行跨平台编译的话,这是一个不错的选择。
    
    编译效率和编译后的代码效率都不错。据说Linux内核的开发者都用2.95版的,这个版本编译出来的C代码应该是效率最好的。GCC(GNU Compiler Collection,GNU编译器套装):是一套由 GNU 开发的编程语言编译器。它是一套以 GPL 及 LGPL 许可证所发行的自由软件,也是 GNU计划 的关键部分,亦是自由的 类Unix 及苹果计算机 Mac OS X 操作系统的标准编译器。GCC(特别是其中的C语言编译器)也常被认为是跨平台编译器的事实标准。GCC 原名为 GNU C 语言编译器(GNU C Compiler),因为它原本只能处理 C语言。GCC 很快地扩展,变得可处理 C++。之后也变得可处理 Fortran、Pascal、Objective-C、Java, 以及 Ada 与其他语言。 
    
    3.Intel C++:收费的,Intel做的,号称在是X86上最好的编译器,安腾上也是。Intel自家的编译器,对自家硬件的支持当然是不用说了。Windows和Linux上都可以用,一般用于一些对性能要求极高的领域,比如内核、游戏等等。缺点是文档不多,尤其是中文的,不是很流行,有一定的门槛。不过随着多核的日益普及,要在Intel的平台上做出好的应用,Intel C++编译器应该是不错的选择,尤其是刚发布的10.0版,直接纳入了对多核编程的支持,值得学习。
    
    4.Borland C++:这是由Borland公司出品。该公司的编译器以速度快、占用空间少著称。Borland C++ Builder和Borland C++ Builder X这两种开发工具用的就是这个编译器。
    

    小知识

    VS包含了VC.VB,VJ,VC#,是一个大集成的开发平台。

    VC++是Visual C++的简称,是Visual Studio编程套件的一个部分,支持语言C/C++的编译。

    展开全文
  • VB6.0编译器源码

    2009-06-16 15:49:48
    用VB6.0编译器,功能不错。 编辑界面很像.Net
  • 小型编译器

    2015-01-04 01:15:40
    编译原理课设,一个小型的编译器,实现基本的编译功能
  • 编译器mars

    2014-07-07 10:12:33
    计算机组成原理编译器mars,内附工具包。使用简单,计算机组成原理课设必备
  • Gcc编译器

    2017-11-13 10:23:27
    什么是GCC编译器? 为什么需要GCC编译器? 没有GCC编译器行不行? 有GCC编译器有什么好处? 编译器: 需要将人们用高级语言编写的程序“翻译”为机器能识别的0和1 表示的机器语言。 GCC编译器有什么好处: ①...

    什么是GCC编译器?
    为什么需要GCC编译器?
    没有GCC编译器行不行?
    有GCC编译器有什么好处?

    编译器:
    需要将人们用高级语言编写的程序“翻译”为机器能识别的0和1 表示的机器语言。

    GCC编译器有什么好处:
    ①:GCC是交叉编译器(编译和运行的环境不同的程序,要用交叉编译器编译)符合我们嵌入式开发的需求(程序编译和运行的环境不同)。
    ②:GCC支持的语言比较多,功能强大。

    预处理: gcc -E test.c -o test.i
    编译:gcc -S test.i -o test.s
    gcc -S test.c -o test.s
    汇编:gcc -c test.s -o test.o
    gcc -c test.c -o test.o
    gcc -c test.i -o test.o
    链接:gcc test.o -o test
    gcc test.c -o test
    gcc test.i -o test
    gcc test.s -o test

    预编译阶段:
    第一方面:替换头文件#include<stdio.h>/#include "math.h"
    头文件是前人写好的函数,这些函数的实用频率比较高,没必要每个人每次写代码都要写。加了头文件,函数可以直接拿来用。

    补充:<>和”“d的区别:
    <>:表示编译器从系统头文件里寻找头文件。
    “”:表示编译器先从当前文件夹下寻找需要的头文件,如果没找到,则到系统头文件里寻找头文件,如果还没找到,编译器报错。

    第二方面: 替换宏定义

    #define PI  3.14

    第三方面:替换宏条件编译

    #ifdef PI
        printf("PI");
    #endif
    #if  #elif  #else  #endif   

    第四方面:去掉注释。

    预编译的作用:
    编译器的作用是把高级语言编写的源程序编译成机器能够识别的机器语言,
    所以吧非核心的部分交给预编译器来做,显得分工更明确。

    编译阶段:由编译器把源代码编译成汇编代码

    汇编阶段:由汇编器把汇编代码汇编成目标文件(二进制文件)

    链接阶段:把目标文件与操作系统链接起来。
    原因:进过汇编器汇编的代码不能在机器上运行,为了使操作系统能够加载可执行文件,文件中必须包含固定的信息头,还必须与操作系统的启动代码链接起来才能运行。

    展开全文
  • tcc编译器-中文编译器

    2010-08-25 21:56:51
    tcc编译器是一个编译速度非常快的一个开源编译器。这是我修改后的,它可以用你的母语作标识符,我可以用中文写代码,这样很久以后打开我自己的代码。依然可以和容易就理解。别人识中文的人一样可以很容易理解。我没...
  • 用C#的simple语言本部分功能编译器,包括词法分析,正规式转换,和一部分语法分析
  • Xcode编译器

    千次阅读 2015-03-30 17:14:50
    首先介绍一下什么是编译器编译器就是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”的程序。一个现代编译器的主要工作流程:源代码 (source code) → 预处理器 (preprocessor) →...

    首先介绍一下什么是编译器。

    编译器就是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”的程序。一个现代编译器的主要工作流程:源代码 (source code) → 预处理器 (preprocessor) → 编译器 (compiler) →  目标代码(object code) → 连接器(Linker) → 可执行程序(executables)。高级计算机语言便于人编写,阅读交流,维护。机器语言是计算机能直接解读、运行的。编译器将汇编或高级计算机语言源程序(Source program)作为输入,翻译成目标语言(Target language)机器代码的等价程序。源代码一般为高级语言 (High-level language), 如Pascal、C、C++、Java、汉语编程等或汇编语言,而目标则是机器语言的目标代码(Object code),有时也称作机器代码(Machine code)。因此编译器就相当于是一个中间翻译工具,将高级语言翻译成计算机所能识别的计算机低级语言。

    在工程Target中可以看到XCode6中默认编译器选项是compiler 6.0

    而苹果Xcode的编译器一共经历了GCC4.2、LLVM GCC 4.2、LLVM compliler 三个阶段的更新发展。

    1:GCC

     GCC(GNU Compiler Collection,GNU编译器套装),是一套由 GNU 开发的编程语言编译器。它是一套以 GPL 及 LGPL 许可证所发行的自由软件,也是 GNU计划的关键部分,亦是自由的类Unix及苹果电脑 Mac OS X 操作系统的标准编译器。GCC 原名为 GNU C 语言编译器,因为它原本只能处理 C语言。GCC 很快地扩展,变得可处理 C++。之后也变得可处理 Fortran、Pascal、Objective-C、Java, 以及 Ada与其他语言。

    2:LLVM

     LLVM 是 Low Level Virtual Machine 的简称,这个库提供了与编译器相关的支持,能够进行程序语言的编译期优化、链接优化、在线编译优化、代码生成。简而言之,可以作为多种语言编译器的后台来使用。

    Apple(包括中后期的NeXT) 一直使用GCC作为官方的编译器。GCC作为开源世界的编译器标准一直做得不错,但Apple对编译工具会提出更高的要求。因此苹果在GCC的基础上有开发了LLVM GCC 编译器,以支持自己更高的要求。

    3:LLVM compliler(clang)

    Apple吸收编译器高材生Chris Lattner(2000年,本科毕业的Chris Lattner像中国多数大学生一样,按部就班地考了GRE,最终前往UIUC(伊利诺伊大学厄巴纳香槟分校),开始了艰苦读计算机硕士和博士的生涯。在这阶段,他不仅周游美国各大景点,更是努力学习科学文化知识,翻烂了“龙书”(《Compilers: Principles, Techniques, and Tools》),成了GPA牛人【注:最终学分积4.0满分】,以及不断地研究探索关于编译器的未知领域,发表了一篇又一篇的论文,是中国传统观念里的“三好学生”。他的硕士毕业论文提出了一套完整的在编译时、链接时、运行时甚至是在闲置时优化程序的编译思想,直接奠定了LLVM的基础。LLVM在他念博士时更加成熟,使用GCC作为前端来对用户程序进行语义分析产生IF(Intermidiate Format),然后LLVM使用分析结果完成代码优化和生成。这项研究让他在2005年毕业时,成为小有名气的编译器专家,他也因此早早地被Apple相中,成为其编译器项目的骨干)的目的要比改进GCC代码优化宏大得多——GCC系统庞大而笨重,而Apple大量使用的Objective-C在GCC中优先级很低。此外GCC作为一个纯粹的编译系统,与IDE配合得很差。加之许可证方面的要求,Apple无法使用LLVM 继续改进GCC的代码质量。于是,Apple决定从零开始写 C、C++、Objective-C语言的前端 Clang,完全替代掉GCC。正像名字所写的那样,Clang只支持C,C++和Objective-C三种C家族语言。这就是clang。

     下面这张图将展示GCC、LLVM-GCC、LLVM Compiler三个编译的关系,由上到下演变进化


    那么三个编译选项,要选择哪一个呢?苹果默认是LLVM Compiler,用它就足够开发需要,GCC4.2不建议用,因为苹果已经不维护它了,而LLVM-GCC不确定是否还在维护,所以最安全的是使用LLVM Compiler。



    展开全文
  • 交叉编译器,ARM EABI编译器区别

    千次阅读 2016-11-01 10:15:45
    首先记录一个下载arm-none-linux-gnueabi-gcc编译器的网址http://www.veryarm.com/arm-none-linux-gnueabi-gcc一. 命名规则交叉编译工具链的命名规则为:arch [-vendor] [-os] [-(gnu)eabi]arch - 体系架构,如ARM,...
  • GCC编译器

    千次阅读 2018-12-28 09:38:10
    GCC 是由 GUN 组织开发的,最初只支持C语言,是一个单纯的C语言编译器,后来 GNU 组织倾注了更多的精力,使得 GCC 越发强大,增加了对 C++、Objective-C、Fortran、Java 等其他语言的支持,此时的 GCC 就成了一个...
  • 编译器常识

    2015-06-07 00:24:14
    课本上介绍了词法分析器 ,语法分析器 ,语义分析器,那么这在成熟的编译器中,占据着怎样的角色? 日常,我接触的最多的编译器是gcc ,clang(当然,还有vb之类的),他们的有啥差别?该如何选择? 基于gcc,如何设计...
  • 编译器原理

    千次阅读 2020-06-29 10:35:40
    编译器是将源代码转化成机器码的软件;所以编译的过程则是将源代码转化成机器码的过程,也就是 cpu 可执行的二进制代码。 编译的过程大概可以分为三个阶段,这也正是当前主流的编译器架构,即:编译前端(frontEnd)、...
  • 交叉编译器

    2015-04-20 18:35:12
    交叉编译器编辑 本词条缺少名片图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! 交叉编译器简介 在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码 ...
  • 编译器介绍

    千次阅读 2018-03-14 11:41:50
    源文件经过编译器编译后才可生成二进制文件,编译过程包括预处理、编译、汇编和链接,日常交流中常用“编译”称呼此四个过程。编译器是一系列工具的集合,如arm平台使用的交叉编译器arm-linux-gcc包括arm-linux-cpp...
  • JIT编译器

    2019-03-19 17:17:51
    为什么会Java虚拟机会同一时候存在解释器和编译器呢? 这是为了兼顾启动效率和运行效率两个方面。Java程序最初是通过解释器进行解释运行的,当...当编译器做的激进优化不成立,不如载入了新类后类型继承结构出现变...
  •   今天开始总结编译原理的知识,但是感觉这门课有难度,嗯?无妨,就是干。第一篇:什么是编译器。...编译器做桥梁。编译器是一个复杂的程序,它的工作是 将源语言程序(一般是高级语言)转化为 目标语言程序...
  • 自制编译器

    千次阅读 2016-09-21 22:02:06
    自己动手写编译器链接器源码
  • VC编译器与GCC编译器的区别

    千次阅读 2019-03-12 14:49:12
    Gcc:它是一款开源的C语言编译器,原来只能在Linux系统上使用,后来移植到了Windows操作系统上,以此为基础的编译环境典型的又MinGW。 它不是编程语言,所以没有语法这一说。G++:和GCC一个性质,只不过它是针对C++...
  • 自制c语言编译器

    2015-05-27 17:15:20
    编译原理课程设计学完之后,自己了一个编译器,里面有文档 ,可以翻译成汇编语言
  • matlab编译器

    千次阅读 2013-11-26 16:36:15
    matlab编译器和程序发布 2013-07-04 15:11 by DarkHorse, 130 阅读, 0 评论, 收藏, 编辑 如何把编写好的matlab程序转换成c/c++语言,如何编译m文件为可执行程序,如何在没有matlab配置环境的机器上运行...
  • 编译器优化

    2011-09-15 19:32:25
    编译器优化 ...一直想给大家介绍一些编译器优化方面的知识,只是又觉得这方面知识内容太多了,介绍起来太花费时间了,实在没有精力去逐一介绍,并且很多编译器方面术语我都不知道中文该如何翻译(国内
  • 其实这个事情是编译器帮你的,编译器帮你加了些许指令,下面就简单介绍下 在TC 2.0的编译器下,tc.exe文件会把c0s.obj目标文件和我们自己写的.obj的目标文件一起进行连接,生成.exe文件,按照这样的方法生成的....
  • 目前有在某知名外企做C++编译器的机会,主要会参与做C++11以及接下来的C++14的新特性实现,但是又会想到做编译器似乎圈子太小太小了,如果万一以后有一天不再想做编译器,似乎不好转。由于是应届生,所以懂得不是很...
  • 常用编译器

    2018-04-09 17:31:36
    一个现代编译器的主要工作流程: 源代码 (source code) → 预处理器 (preprocessor) → 编译器 (compiler) → 目标代码 (object code) → 链接器 (Linker) → 可执行程序 (executables)。GCC家族: Cygwin Mingw32...
  • 运用在线编译器

    2018-03-17 17:23:57
    这是基于MVC框架写的,如何巧妙的使用在线编译器。代码简洁明了,通俗易懂。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 616,309
精华内容 246,523
关键字:

做编译器