热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何编写第一个语言

如何解决《如何编写第一个语言》经验,为你挑选了1个好方法。

这是鸡和蛋的问题.为语言X引导编译器的一个解决方案是使用语言Y,但是如何首先编译语言Y的编译器?!如果你一直跟踪到没有编译器存在的时间,那么第一个编译器如何能够自己编译?请使用高级隐喻来帮助理解.



1> Mike Kinghan..:

让我们把它看作是对任何非C语言的高级语言的编译器都可以用C 1编写

所以我们也可以问:如果我有一台计算机但没有编译器,而且我想要一个C编译器,我该怎么做?

您可以使用 计算机的汇编语言编写C编译器,假设您已 为该计算机安装了汇编程序.

在实践中,这将是愚蠢的努力.更明智的是,你会在汇编代码中编写一个比汇编程序更具表现力和强大功能的中间语言编译器,然后用它来编写一个更具表现力和更强大的编译器......直到你编写了一个C编译器.

每个逐步更多的powerul编译器都是一个程序,它将源语言(您作为发明者已定义)转换为计算机的汇编语言,然后调用汇编程序(您已经拥有)来翻译程序集代码到您的计算机的机器代码2.

如果你还没有装配工怎么办?

然后,您必须在计算机的机器代码中编写汇编程序.在机器代码中从头开始编写一个复杂的程序可能是没有人能够做到的事情.但在任何人编写汇编程序之前 - 机器代码 - 所有程序都必须用机器代码编写.第一批装配工是在20世纪40年代后期开发的.与编译器一样,你最好是迭代地开发汇编程序:首先是一个基本的,用机器代码编写的; 接下来是一个更强大的,用最基本的一个写的......

计算机的机器代码是CPU的本机语言,因此无需进一步转换即可将其转换为可执行代码.您只需要将组成机器代码程序的字节加载到内存区域并让处理器在初始地址加载指令:然后计算机正在运行程序.

第一个C编译器的创建几乎就像上面描绘的那样.C语言的发展是该语言 的发明者Dennis Ritchie所记录的历史


[1]当然,从历史上看,几个主要的高级语言编译器早于C,~1969-73:

Fortran,~1954-57

Algol,~1958-60

COBOL,~1959-61

PL/1,~1963-66

[2]对于现代编译器,这是一个很大的简化.阅读关于中间表征的内容, 并参见例如GCC的概念结构


推荐阅读
  • ejava,刘聪dejava
    本文目录一览:1、什么是Java?2、java ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • 开发笔记:Python之路第一篇:初识Python
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Python之路第一篇:初识Python相关的知识,希望对你有一定的参考价值。Python简介& ... [详细]
  • 初识java关于JDK、JRE、JVM 了解一下 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
    本文旨在全面介绍Windows内存管理机制及C++内存分配实例中的内存映射文件。通过对内存映射文件的使用场合和与虚拟内存的区别进行解析,帮助读者更好地理解操作系统的内存管理机制。同时,本文还提供了相关章节的链接,方便读者深入学习Windows内存管理及C++内存分配实例的其他内容。 ... [详细]
  • 本文介绍了GTK+中的GObject对象系统,该系统是基于GLib和C语言完成的面向对象的框架,提供了灵活、可扩展且易于映射到其他语言的特性。其中最重要的是GType,它是GLib运行时类型认证和管理系统的基础,通过注册和管理基本数据类型、用户定义对象和界面类型来实现对象的继承。文章详细解释了GObject系统中对象的三个部分:唯一的ID标识、类结构和实例结构。 ... [详细]
  • linux进阶50——无锁CAS
    1.概念比较并交换(compareandswap,CAS),是原⼦操作的⼀种,可⽤于在多线程编程中实现不被打断的数据交换操作࿰ ... [详细]
  • c语言基础编写,c语言 基础
    本文目录一览:1、C语言如何编写?2、如何编写 ... [详细]
  • 第四讲ApacheLAMP服务器基本配置Apache的编译安装从Apache的官方网站下载源码包:http:httpd.apache.orgdownload.cgi今 ... [详细]
  • 原文地址http://balau82.wordpress.com/2010/02/28/hello-world-for-bare-metal-arm-using-qemu/最开始时 ... [详细]
  • 初探PLC 的ST 语言转换成C++ 的方法
    自动控制软件绕不开ST(StructureText)语言。它是IEC61131-3标准中唯一的一个高级语言。目前,大多数PLC产品支持ST ... [详细]
  • 【技术分享】一个 ELF 蠕虫分析
    【技术分享】一个 ELF 蠕虫分析 ... [详细]
  • Linux下C语言的几道经典面试题小结(分享)
    本篇文章整理了几道Linux下C语言的经典面试题,相信对大家更好的理解Linux下的C语言会有很大的帮助,欢迎大家探讨指正。1、如果在Linux下使用GCC ... [详细]
author-avatar
c_陈可儿
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有