任何语言都有开发出来编译器的可能?

任何语言都有开发出来编译器的可能?

今天在思考一个问题,毕竟学完编译原理一段时间了,编译器到底可以由哪种语言开发呢?

我们都知道编译程序通常分为下面五个阶段:
1)词法分析
2)语法分析
3)语义分析与中间代码产生
4)优化
5)目标代码生成

当然最难的一点就是目标代码的生成,这一阶段实现了最终的翻译,就是真正把原码翻译成可以被CPU直接计算的机器码(NativeCode)。

在网上看了看,有的网友说C语言的第一代编译器是由B语言写的,因为C语言毕竟是在B语言的基础上设计出的一种新语言。

但是B语言由A语言修改而成的语言,当然B语言的编译器肯定是A语言生成的,那A呢?无穷递归,总有一个结束的地方。

那就是汇编语言,汇编语言写出了第一个简单的编译器,然后这个编译器再生成编译器,不断的生成新的编译器,不断的抛弃旧编译器,这样编译器就越来越成熟,越来

越好用了。

也就是下面的这句话:

机器生汇编,汇编生A,A生B,B生C,C生万物。

理论上来讲,用什么语言都可以编写出编译器,只是效率的问题,因为经过很多步骤的翻译,都最终翻译成了机器码,有的步骤多,效率低,有的步骤少,效率高,当然,我

们现在用的就是效率高的这种。

其实我在想为什么汇编语言生成一个简单的编译器后,可以用新生成的编译器再次生成编译器,例如,C语言开发C的编译器呢?

这是一个递归的思想,举个例子一看就明白了

用一个大的模具可以生成一个A模具,A模具可以做出来B模具,依次往下推,最终这个小模具可以做出来小盒子用来装东西。

第一个大模具肯定是手工做出来的第一个模具,但是有了这个大模具后,后面就可以用他自动的生成更多的模具,后面的各种模具加起来又可以造出来更精致的模具,

所以,自动第一个大模具造出来模具的时候,大模具就可以被抛弃了。

时间: 2024-10-08 14:07:03

任何语言都有开发出来编译器的可能?的相关文章

如何在Java平台上使用脚本语言做Java开发

如何在Java平台上使用脚本语言做Java开发     最近开始流行区分Java平台和Java语言,但很多Java开发者还是不能确定如何在 Java应用程序开发中结合脚本.本篇文章,Gregor Roth给出了在Java平台上使用脚本的方法.通过这篇文章,你可以了解怎样在你的Java应用程序中使用脚本,是否你要通过使用Groovy和 Jython把不同的Java应用程序模块粘合在一起,或者写一个你自己的基于JRuby的应用程序,适用于Java平台. 作为一个Java开发者,你可能已经注意到了,J

开发一个编译器

1.目的:开发一个编译器 1.编译器简介: 编译器就是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”的程序. 一个现代编译器的主要工作流程:源代码 (source code) → 预处理器 (preprocessor) → 编译器 (compiler) → 目标代码 (object code) → 链接器(Linker) → 可执行程序 (executables) 编译器将汇编或高级计算机语言源程序(Source program)作为输入,翻译成目标语言(Target l

Java从0到全栈-Java语言概述与开发环境搭建

Java从0到全栈-Java语言概述与开发环境搭建 Java从0到全栈 Java语言概述 Java发展历史 Java之父-James Golsing 起源 1991年,SUN(Standford University Network)公司的James Golsing领导的工程师小组想要开发一种用于像电视机.微波炉.电话这样的消费类电子产品的小型计算机语言,该产品的特点是由于不同的厂商选择不同的CPU和操作系统,因此要求该语言不能和特定的体系结构绑定在一起,也就是跨平台的.最初将这个语言命名为Oa

学会了 C 语言真的可以开发出很多东西吗

原帖地址:知乎 一个人在知乎上问了这么一个问题,然后 涛吴 有了下面的回答. 马里奥碰到花朵就变身. 什么是马里奥?一个装着 16 × 32 个小色块的长方形,其中一些色块填着颜色,另一些没有.什么是花?一个 16 × 16 的正方形.什么是「变身」?把马里奥这个方块里面代表衣服的褐色变成红色,代表背带裤的红色变成白色.什么是褐色?暂且说它是 0x887000 这个数字.什么是「碰到」?马里奥的长方形与花朵的正方形有所重叠.什么是「重叠」?假设马里奥的这个方块占据屏幕(什么是屏幕?一个能装下 2

T语言与快速开发平台

软件开发的智能机器人-引领软件行业新革命 演示地址: http://www.ttyu.net/plat 市场痛点 android要开发一套,ios又要开发一套,还有h5(web)页面. 一个项目要三批懂不同语言的人开发. 开发环境安装麻烦,ios还只能在苹果电脑上开发. 你的 大量时间花费在软件调试上,bug可还是源源不断啊. 项目工期一再拖延,客户一再埋怨甚至要中止合同. 开发人员流失.接手的新员工却无从下手. 老板无法准确的评估工作量,开发人员说多么难做要多长多长时间,到底谁说了算? 系统结

程序员都应学习代码编译器知识

程序员都应学习代码编译器知识   所有优秀的计算机科学学院都提供了编译器课程,但是相对比较少的学校把它作为本科课程的必修部分.这篇文章回答了这个问题:为什么需要学习编译器知识?即使你从没打算过编写编译器. 我写这篇文章的其中一个原因是,尽管我在读本科时很喜欢编译器课程,但是我几乎看不到它的实际作用.大多数资料看起来要么简单易懂,要么很深奥(事实上,我找到的大部分编译器资料都是很枯燥的.)无论怎样,我用了几年时间总结了为什么这类课程会如此有用的实际原因.原因如下. 分析器和解析器无处不在 严谨的p

关于开发语音编译器的过程

对于厂家制造的特定规则的语音IC, 都需要为之开发相对应的语音编译器来满足需求,主要差别就是MCU处理器对于数据的访问形式不同而导致(也就是mcu本身所设计的指令和硬件不同),那么就需要编译一个对应的语音文件让此IC去识别执行. 再说开发语音编译器软件流程之前,先谈谈我们此次用到的MCU(GA452SP16)微型处理器的一些信息:A452SP16是一个具有低功耗和高速CMOS工艺的8位微处理器.它的操作核心由RISC类体系结构实现.采用16位精简指令(58条指令 – 大多数指令执行时间为单个指令

为算术语言(Arithmetic-Language)实现编译器和解释器

到目前,我们更注重的是语言本身的设计,即前端,没有涉及语言的编译器或解释器的实现,即后端.在这一节,我们将关注后端的实现,由抽象语法树(Abstract Syntax Tree,AST)定义的一种简单的算术语言.第一小节所展示的抽象语法树是基于联合类型的. 在下一章"解析文本",我们还要回到这个示例,来构建这种语言的前端.此时,我们已经有效地构建了一种小型语言,但这不是本章的重点,当前的重点只关注后端. 对解析器的结果,有两种不同的作用模式:编译和解释.编译,即把把抽象语法树改变成其他

新书:Scala语言基础与开发实战

大数据科学丛书系列的最新一本<Scala语言基础与开发实战>即将面市,预计月底上架.内容还是不错的,文笔简介,内容实用,值得学.用. 大数据资深培训师王家林新作. 详细介绍大数据开发语言Scala及其在分布式框架Akka和Kafka中的应用. 秉承"实战"类图书特点,解析大量代码的编写操作,具有较强的可操作性,便于读者学习和理解. 算上再过几个月出版的<Spark内核解析及性能调优>,一年时间,大数据科学丛书系列之Spark的小套系基本形成了:从学习Spark的