【问题标题】:What compiler tools are used by "official" language developers?“官方”语言开发人员使用哪些编译器工具?
【发布时间】:2010-07-23 01:52:05
【问题描述】:

那里有许多词法分析器和解析器生成器 - lex/flex 和 yacc/bison、jflex 和 javacup、gplex 和 gppg 等。我想知道语言的官方开发人员使用什么工具 - 做 Sun 和Microsoft 在开发 Java 和 .NET 时使用其中任何一种,还是这种规模的商店只使用自定义的内部工具?

【问题讨论】:

    标签: c# java compiler-construction compilation


    【解决方案1】:

    我曾经听过一个传说,大多数c编译器都是自己编译的。

    他们所做的是他们编写新版本(示例版本 5),使用旧版本(版本 4)编译它,然后使用新编译的版本(使用版本 4 编译的版本 5),他们自己编译再次。 (所以版本 5 现在由版本 5 编译)。

    【讨论】:

    • 地球上的生命就是这样开始的。
    • 不是传说,这就是多年来的情况;请参阅 1984 年有关编译编译器的经典文章:c-program.com/kt/reflections-on-trusting.html
    • 我不记得从哪里读到的了。哈哈。感谢您的链接。
    • @iWantSimpleLife 鸡和蛋的问题en.wikipedia.org/wiki/Bootstrapping_%28compilers%29
    • 我以为 GCC 最初是由 Pastel 编译的? :-) 请注意,此类引导原则不仅限于 C 编译器。 Free Pascal 也同样工作,第一个版本由 Turbo Pascal 编译
    【解决方案2】:

    我曾研究过一些商业编译器,但我不知道有任何基于 lex 或 yacc 生成器的编译器。 Lex 和 yacc 可以方便地快速构建和解析语法,但这通常不是商业产品的最高优先级。我并不是说商业产品不能在 yacc 上构建——我敢肯定有些是这样——但我参与的商业编译器都是手工编写的代码,它倾向于原始速度而不是其他一切。

    是的,编译编译器本身是常态,是 makefile 逻辑中“有趣”的 Escher 式冒险。 ;>

    【讨论】:

    • 混合交叉编译让它变得更有趣。
    【解决方案3】:

    JavaCC 具有最新的 Java 语法。 Java 编译器是否真的通过 JavaCC 编写是另一个问题。

    【讨论】:

    • 语法经常被用作文档的一种形式,并且通常保持干净。另一个这样的例子是 Delphi,它在旧版本的内封面中有一个文档,这远非完整。
    【解决方案4】:

    对于更通用的编译器,请参阅 D Thorpe 的回答。他们通常不会。

    然而,这些工具通常被公司使用,这些公司通常将 C 编译器重新定位到新创建的目标 (*),并带有目标特定的扩展,以安全、一致的方式快速插入新功能,然后运行一些验证套件以确保结果是合规的。

    (*) 想想新的 DSP、微控制器等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-16
      • 2010-09-14
      • 2011-02-21
      • 1970-01-01
      • 2011-07-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多