ADA 95教程 程序结构
我们的第一个ADA项目
示例程序
with Ada.Text_IO; use Ada.Text_IO;
procedure UglyForm is
begin
null;
end UglyForm;
开始我们学习Ada的最好方法是看一个真正的Ada程序,因此无论您使用什么方法,都可以在显示器上显示名为e\u c02\u p1.Ada的Ada程序。
您看到的是可以编写的最简单的Ada程序。尽管它是最简单的,但它是一个完整的可执行程序,在我们讨论了其中出现的一些实体之后,您将能够编译并执行它。
第1行中的procedure 单词是我们将要查看的保留字中的第一个。在本教程稍后的部分中,我们将简单地说过程就是程序。因此,在这种情况下,程序由保留字procedure 定义,后跟程序名,然后定义另一个保留字。在保留字is之后,我们将实际的程序扩展到第5行。因此,保留字 is 表示程序(或过程)被定义为后面的所有内容。
程序名,必须按照第1章给出的命名标识符的所有规则来选择。除了这些规则,它不能是69个保留字之一。
实际的程序在哪里?
任何Ada程序都有两个部分,一个是声明性部分,包含在保留字is和begin之间,另一个是可执行部分,包含在保留字begin和end之间。在本例中,声明部分中没有任何内容,可执行部分由第4行组成。(我们将很快返回到第4行。)在保留字后面是程序名和分号的重复。重复程序名是可选的,但作为一种风格,您应该养成习惯,在每个程序的末尾都包含它。结束程序需要分号。
实际程序的可执行部分是第4行,因为这是begin和end保留字之间的唯一语句。在这种情况下,我们想研究最简单的Ada程序,所以我们希望程序什么都不做。我们显式地告诉Ada编译器什么也不做,这是第4行中第五个保留字null的定义。Ada要求您明确地告诉它,您真正的意思是什么也不做,而不是简单地将程序的可执行部分留空,这在大多数其他语言中是可以接受的。
什么是语句终止符?
第4行以分号结束,分号是Ada中的语句终止符。它告诉编译器这个特定的语句此时已完成。在本章后面,您将看到为什么需要语句终止符。过程末尾的分号也是语句终止符,因为在Ada中,procedure 以及整个程序被定义为一个完整的语句。
--是Ada注释,编译器将忽略它们。Ada注释的完整定义将在本章末尾给出。
应该清楚的是,一个完整的Ada程序至少使用四个保留字来定义每个字段的开头和结尾,它们必须按照给定的顺序出现。当然,声明性部分和可执行部分还可以包含许多其他内容,我们将在本教程的其余部分看到这些内容。
程序概略如下:
procedure <program name> is <declarative part> begin <executable part> end <optional repeat of program name>;
在这一点上,您最好编译并运行这个程序,以确保它真正遵守Ada编译器的所有规则。不幸的是,它什么也做不了,所以运行它不会给你任何结果。即使这个程序什么都不做,任何好的Ada编译器都允许您编译、链接、加载、执行并正确终止这个程序的执行。
现在开始做了一些事情的程序
with Ada.Text_IO; use Ada.Text_IO;
procedure UglyForm is
begin
Put("Good form ");
Put("can aid in ");
Put("understanding a program,");
New_Line;
Put("and bad form ");
Put("can make a program ");
Put("unreadable."); New_Line;
end UglyForm; -- Result of execution -- Good form can aid in understanding a program, -- and bad form can make a program unreadable.
观察名为e_c02_p1.ada 的程序,它是一个真正执行某些操作的示例程序。暂时忽略前两行,它们需要告诉系统如何将数据输出到监视器。我们将在以后的课中研究它们。仅考虑第4行到第10行,您将看到上一个程序中使用的结构完全相同,第8行中有一些新内容。
第8行是对Ada编译器提供的名为Put的过程的调用,以方便您使用。它的定义非常精确,因此您可以使用它在显示器上显示文本。编译和执行此程序时,括号和引号中包含的字符串将显示在监视器上。名为Put的过程实际上是名为Ada.Text_IO文件这就是为什么前两行包含在这个程序中。它们告诉系统在哪里可以找到名为Put的过程,以及如何使用它。(我们将在本教程后面详细讨论这两行。)
同样,第8行中的可执行语句的末尾有一个分号作为语句终止符,就像在最后一个程序中保留字null后跟一个分号一样。
编译并执行这个程序,每次执行程序时,注意监视器上都会显示短语。
更多输出
with Ada.Text_IO; use Ada.Text_IO;
procedure TwoPut is
begin
Put("Good form ");
Put("can aid in ");
Put("understanding a program,");
New_Line;
Put("and bad form ");
Put("can make a program ");
Put("unreadable."); New_Line;
Put_Line("Something Put");
end;
您将看到与上两个示例程序的一些区别。请注意,procedure 名称在程序的最后一行中没有重复。正如我们前面所说的,这是可选的,但是包含名称是一个好习惯。
第二个,也是最明显的区别,是这个程序中有几个可执行语句。与大多数其他过程编程语言一样,可执行语句是按从上到下的顺序执行的。带有对过程Put的调用的行与上一个程序一样被执行,除了一个新的操作在这里变得明显,因为我们有多个Put调用。Put调用不会导致光标返回到文本行输出之后的行的开头。光标只是停留在它结束的地方,导致第8行和第9行在监视器的同一行上输出。另一个新的过程,至少对我们来说是新的,命名为new_Line,这个过程使光标返回到监视器下一行的开头。事实上,在使用New_Line过程时,甚至可以在过程名称后面的括号中包含一个可选的数字,并且光标将向下移动该行数。如果省略了可选数字,则假定值为1。
请仔细注意,这里使用的过程名Put和New_Line满足我们在第1章中研究的命名标识符的所有要求。这些名字是由美国标准委员会选定的。
13行引入了另一个有用的过程,名为Put_Line,它导致在圆括号内的字符串输出之后自动输出“回车符”。你会发现这是非常有用的,应该立即开始使用它。Ada编译器将忽略第14行中的空行。在接下来的两个示例程序中,将更多地介绍空格的使用。
我们如何命名标识符?
只要遵守本教程第1章中列出的命名标识符的所有规则,我们就可以根据自己的意愿为程序命名。由于Ada编译和链接程序的方式,我们对程序名有限制。为了满足ADA95参考手册(ARM)中规定的所有要求,编译器必须生成某种形式的包含对象和类型信息的中间文件。任何特定的Ada编译器都可能基于我们提供的程序名或文件名对中间文件使用命名约定,因此为了避免混淆,在本教程的大部分内容中,将在两个位置使用相同的名称。因此,在本例中,过程的名称要与文本文件名相同。请注意,您的特定Ada编译器可能没有此限制。
有了上面的信息,你应该能够弄清楚这个程序将要做什么。编译并运行它,看看您的分析是否正确。这是一个很好的开始编程的实践,您可以使用这三个子程序以整洁的格式输出一些文本。
ADA编程的风格
观察名为e_c02_p1.ada的程序,您将看到一个熟悉的表单,以及一个非常清晰易懂的ada程序。你完全可以理解这个程序的功能。您应该注意到Ada编程是自由形式的,允许您在任何地方添加空格和空行,以使程序清晰易懂,当然前提是您不拆分标识符。
再说一次,不要担心前两行,我们稍后再讨论。
with Ada.Text_IO ; use Ada.Text_IO;procedure UglyForm is begin Put ("Good form ") ;Put("can aid in ") ;Put ("understanding a program,");New_Line;Put ("and bad form ");Put ("can make a program ");Put("unreadable."); New_Line;end UglyForm; -- Result of execution -- Good form can aid in understanding a program, -- and bad form can make a program unreadable.
在编译并执行上面程序之后,请观察下面示例程序,以了解糟糕的格式样式示例。看看你是否能弄清楚这个程序是做什么的,然后决定如果出现问题,你是否要调试它。最后,编译并执行这个程序,你会发现它确实编译并执行了,就像上一个程序一样。
这两个程序旨在让您了解在编写Ada程序时格式化样式的自由度以及样式可以添加到程序中的信息量。
ADA程序中的注释
注释不向计算机传递任何信息,它们只帮助程序的编写者和读者理解原编写者在程序中试图做什么。Ada中的所有注释都以一个双减号 -- 开始,如果您愿意的话,也可以是双破折号,并继续到该行的末尾。破折号之间不允许有空格,它们必须相邻。Ada语言中没有关于行中注释的规定,只有行尾注释,尽管它们可以是一整行,如示例程序的前两行所示。(尾部说明1)
注释几乎可以放在Ada程序的任何地方,包括程序开始之前和结束之后。
课后练习
1.写一个程序在显示器上显示你的名字 (Solution)
2.编写一个程序,在显示器的不同行上显示您的姓名、地址和电话号码 (Solution)
---------------------------------------------------------------------------------------------------------------------------
原英文版出处:https://perso.telecom-paristech.fr/pautet/Ada95/a95list.htm
翻译(百度):博客园 一个默默的 *** 的人
尾部说明1:可以忽略,ADA注释就用 --