gcc gnatmake Ada编译器用什么语言编写?

Mic*_*ael 1 compiler-construction gcc gnu ada

我是一名计算机科学专业的学生.目前我们正在学习Ada编程语言.编译现在非常简单:gnatmake source.adb所以我不知道gnatmake实际上做了什么或者是什么(脚本?二进制?其他什么?).无论如何,我想知道编译器本身(还有解析器,如果用不同的语言编写)用什么语言编码?

T.E*_*.D. 5

典型的编译器带有两个基本工具:编译器和链接器.

编译器将语言源代码(文本)转换为机器语言对象文件(二进制文件).它可能会包含一些对象重定位信息,以帮助链接器.

链接器获取多个机器语言对象文件,并将它们全部链接到一个机器可执行文件中.

您通常必须告诉编译器在哪里可以找到执行编译所需的所有额外文件,然后您必须告诉链接器将可执行文件(包括您可能使用的系统库)链接在一起所需的每个文件的名称.这可能会变得非常复杂,这就像构建工具一样make.

Ada的定义方式应该总是有某种图书管理员来为您跟踪这些信息.因此,要执行系统的完整构建,您应该做的就是让图书管理员为您构建可执行文件.

Gnat处理此库管理程序功能的方式是它假定(除非另有说明)Ada单元(包)名称与源和目标文件名之间存在一对一的对应关系.因此,如果它需要X完成编译的规范,它就知道去X.ads查找规范文件.当它的链接时间,它知道它将找到其目标文件X.o.这意味着如果它需要从包X中成功链接的例程,它就知道如何为您做到这一点,其中一个愚蠢的链接器将失败并告诉您它找不到的"符号"的半加密名称.

因此,不像为C或C++那样为程序中的每个单元键入单独的编译命令,而是可以使用gnatmake编译给定可执行名称所需的每个单元,然后将它们链接在一起.一步,容易腻.


至于你的上一个问题,Gnat Ada编译器几乎完全是用Ada编写的.编译器用他们自己的语言编写并使用自己编译是很典型的.这称为自托管.

但是,它与GCC绑定在一起,因此GCC中常见的部分(从树格式转换为目标对象代码的部分和我认为的链接器)都是用C语言编写的.