Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# “使用什么编译器工具?”;官方";语言开发者?_C#_Java_Compiler Construction_Compilation - Fatal编程技术网

C# “使用什么编译器工具?”;官方";语言开发者?

C# “使用什么编译器工具?”;官方";语言开发者?,c#,java,compiler-construction,compilation,C#,Java,Compiler Construction,Compilation,有很多词法分析器和解析器生成器——lex/flex和yacc/bison、jflex和javacup、gplex和gppg等等。我想知道语言的官方开发人员使用了哪些工具——Sun和Microsoft在开发Java和.NET时会使用这些工具吗,或者这种规模的商店只使用定制的内部工具吗?我曾经听说一个传说,大多数c编译器都是自己编译的 他们所做的是编写新版本(示例版本5),使用旧版本(版本4)编译,然后使用新编译的版本(使用版本4编译的版本5),再次编译自己。(因此,版本5现在由版本5编译)。Jav

有很多词法分析器和解析器生成器——lex/flex和yacc/bison、jflex和javacup、gplex和gppg等等。我想知道语言的官方开发人员使用了哪些工具——Sun和Microsoft在开发Java和.NET时会使用这些工具吗,或者这种规模的商店只使用定制的内部工具吗?

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


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

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

我已经在一些商业编译器中使用过,但我不知道有任何编译器是基于lex或yacc生成器构建的。Lex和yacc很方便快速地建立语法并进行解析,但这通常不是商业产品的最高优先级。我并不是说商业产品不能建立在yacc之上——我肯定有些已经建立了——但我所参与的商业编译器都是手工编写的代码,支持原始速度而不是其他任何东西


是的,编译编译器本身就是一种规范,也是makefile逻辑中一种“有趣的”埃舍尔式的冒险

有关更通用的编译器,请参见D Thorpe的答案。他们通常不会

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


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

这正是地球上生命的起源。不是传说,而是多年来的事实;看这篇1984年关于编译编译器的经典文章:我不记得从哪里读到的。哈哈。谢谢你的链接。@iWantSimpleLife我原以为GCC是由Pastel编写的鸡和蛋问题?:-)注意,这种引导原则并不局限于C编译器。免费的Pascal也同样有效,第一个版本由Turbo PascalGrammars编译,通常作为文档形式使用,并且通常保持干净。另一个这样的例子是Delphi,它在旧版本的内封面中有一个文档,这远远不够完整,而交叉编译和它的混合使得它更加有趣。