Ada初学者堆栈程序 [英] Ada beginner Stack program
问题描述
基本上,我有2个文件(.adb和.ads)。我是Ada的新手,还介绍了如何编译2个文件。该程序是一个基本的堆栈实现。编译.adb文件时出现此编译错误。
Basically, I have 2 files ( .adb and .ads). I am totally new to Ada and also how to compile 2 files. The program is of a basic stack implementation. I got this compile error when I compiled the .adb file.
$ gcc -c test_adt_stack.adb
abstract_char_stack.ads:22:01: end of file expected, file can have only one compilation unit
这两个文件我有:
abstract_char_stack.ads
-----------------------------------------------------------
package Abstract_Char_Stack is
type Stack_Type is private;
procedure Push(Stack : in out Stack_Type;
Item : in Character);
procedure Pop (Stack : in out Stack_Type;
Char : out Character);
private
type Space_Type is array(1..8) of Character;
type Stack_Type is record
Space : Space_Type;
Index : Natural := 0;
end record;
end Abstract_Char_Stack;
-----------------------------------------------------------
package body Abstract_Char_Stack is
----------------------------------------------
procedure Push(Stack : in out Stack_Type;
Item : in Character) is
begin
Stack.Index := Stack.Index + 1;
Stack.Space(Stack.Index) := Item;
end Push;
--------------------------------------------
procedure Pop (Stack : in out Stack_Type;
Char : out Character) is
begin
Char := Stack.Space(Stack.Index);
Stack.Index := Stack.Index - 1;
end Pop;
--------------------------------------------
end Abstract_Char_Stack;
另一个是 test_adt_stack.adb
-----------------------------------------------------------
with Ada.Text_IO; use Ada.Text_IO;
with Abstract_Char_Stack; use Abstract_Char_Stack;
procedure Test_ADT_Stack is
S1 : Stack_Type;
S2 : Stack_Type;
Ch : Character;
begin
Push(S1,'H'); Push(S1,'E');
Push(S1,'L'); Push(S1,'L');
Push(S1,'O'); -- S1 holds O,L,L,E,H
for I in 1..5 loop
Pop(S1, Ch);
Put(Ch); -- displays OLLEH
Push(S2,Ch);
end loop; -- S2 holds H,E,L,L,O
New_Line;
Put_Line("Order is reversed");
for I in 1..5 loop
Pop(S2, Ch);
Put(Ch); -- displays HELLO
end loop;
end Test_ADT_Stack;
-----------------------------------------------------------
我在做什么错?我只想编译它并显示它的功能。这是研究程序分配的一种方法。但是我无法使其编译或不知道我是否做对了。
What am I doing wrong? I just want to have it compile and display what it's supposed to do. This was a study the program kind of assignment. But I can't make it compile or don't know if I am doing it right.
推荐答案
问题是GNAT [而FCC GNAT是GCC使用的,IIRC]不允许在单个文件中使用多个编译单元。 (这是由于他们如何管理图书馆,但是对于初学者来说,这可能太详细了。)
The problem is that GNAT [and FSF GNAT is what GCC uses, IIRC] does not allow multiple compilation-units in a single file. (This is due to how they manage the library, but that is perhaps a bit too detailed for a beginner to worry about.)
解决方案,每个方案都需要自己的解决方案文件:
Solution, each of these needs its own file:
- Abstract_Char_Stack规范(
abstract_char_stack.ads
) - Abstract_Char_Stack主体(
abstract_char_stack.adb
) - Test_ADT_Stack [procedure]主体(
test_adt_stack。 adb
)
- Abstract_Char_Stack Specification (
abstract_char_stack.ads
) - Abstract_Char_Stack Body (
abstract_char_stack.adb
) - Test_ADT_Stack [procedure] body (
test_adt_stack.adb
)
这篇关于Ada初学者堆栈程序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!