lcc编译器

来源:互联网 发布:产品过程特性矩阵图 编辑:程序博客网 时间:2024/05/15 13:10

LCC,全称为"Local C Compiler"或"Little C Compiler",是一个小型自由的ANSI C编译器,源代码开放,由Chris Fraser和David Hanson设计开发。

源代码和文档

  lcc编译器的源代码可在 ftp.cs.princeton.edu (128.112.152.13) 服务器的pub/lcc目录下免费获得。关于lcc设计和实现最权威的书籍当属两位开发者合著的的经典<<A Retargetable C Compiler: Design and Implementation>> ,中文译本叫《可变目标C编译器——设计与实现》.

lcc设计

  对于lcc来说,并没有一个独立的设计阶段。lcc刚开始只是针对C语言的一个子集的编译器,所以其最初的设计目标非常有限,仅定位于针对一般的编译器实现、特别是代码生成的教学的需要。即使后来lcc演化成了适于实用的C编译器,这一设计目标仍然没有大的改变。
  lcc比大多数其他ANSI C编译器更小、更快。尽管有时在编译器设计时会忽视编译的速度,但快速仍是广为欣赏的特点,用户经常把速度作为他们使用lcc的原因之一。快速编译本身并不是设计的目标,它是追求简单、特别是注意编译器中严重影响速度的组成部分的实现的自然结果。lcc的词法分析和指令选择都特别快,对整个系统的速度贡献最大。
  lcc能够生成相当高效的目标代码,它以产生好的本地代码为设计目标,而其他优化编译器所具有的全局优化,不在lcc的设计目标之中。大多数现代编译器,特别是CPU供应商开发的编译器,必须采取尽可能的优化措施,以期在性能测试中突出他们的机器。这些编译器很复杂,一般需要数十人组成的小组进行开发。尽管这些高度优化的C编译器在启用优化选项时,产生的代码比lcc产生的代码更高效,但数百名使用lcc作为日常主要C编译器的开发者发现,对大多数应用来说,lcc产生的代码已经足够快了,同时,由于lcc的本身速速非常快,也帮助他们节约了许多时间。另外,系统开发者如果需要对lcc进行修改,则会发现lcc很容易理解。
  lcc的前端大约有9000行代码,每种与目标相关的代码生成器有700行代码,还有约1000行与目标无关的后端代码被所有的代码生成器共享。

  除个别例外,lcc的前端一般使用成熟的编译技术。lcc的词法分析器和递归下降分析器都是通过手工编写的(注:词法分析器另一个方法是通过LEX工具自动生成)。后端是lcc最令人感兴趣的模块,原因之一就是体现了它旨在提高可变目标能力的设计选择。第一,后端使用了代码生成器lburg,该产生器可以根据紧缩规范产生代码生成程序。第二,只要可能,一些明显依赖于目标机器的函数尽可能被移到前端实现。

为什么学习编译原理?

     其实编译原理的很多技术可以应用在其他地方,这里就不想展开了。学就是了。这么牛的一门技术如果学成也可以炫耀一下:),编译原理无疑是大本软件课程中最难的一门课。所以很多人也就仅仅停留在了解,即便有学过原理的也不想或无力搞出一个真实的编译器来,但。。。动手是最关键的也是学技术的最好的方法。

为什么选择lcc而不是gcc?

       我想这个问题还是比较好回答的:

lcc 是ANSI C编译器,是标准C编译器,仅仅支持标准规定的语法,所以规模很小。而gcc则是标准C的超集,它不仅能编译标准C而且做了很多扩展,因此gcc的代码量是非常惊人的,GCC早在1999年就由原来的GNU C COMPILER(GNU C编译器) 进化为GNU COMPILER COLLECTION(GNU 编译器家族),能编译C,C++,Pascal,Fortran,Ada,Object C等等,而且是目前支持平台最多的编译器,可以说只要稍微有点用途的平台都有相应的gcc版本,gcc产生的代码也是非常高效的,因为它的优化器相当出色。目前gcc最新版本是4.3.2,仅仅是C部分的代码量就有将近150万行!仅仅是想搞清源代码的架构都要数周甚至数月,更不要说阅读完毕了。而lcc的最新版本4.2却仅有近4万行的代码,这是比较小的,效率高的话大概几天就能看完。对初学者来说,gcc无疑是一个噩梦,初学者只需了解标准C就够了。学好lcc是比较快的,相对而言,gcc的代码是比较晦涩的。有个遗憾是lcc没有优化器。

原创粉丝点击