LINUX.ORG.RU

[Ada] Не компилится код

 


0

2

Всем здрям! Читаю книгу «Ada - язык системного проектирования». В ней первый же пример


-- Коментарий
-- Глобальные типы, используемые
-- вызывающей программой и пакетом
type ELEM is INTEGER;
type STATUS is (OK, UNDERFLOW, OVERFLOW);
--Стековый пакет для спецификации
-- переменных типа ELEM
-- Спецификация
package STACK is
  procedure PUSH (E:in ELEM; FLAG: out STATUS);
  procedure POP (E:out ELEM; FLAG: out STATUS);
end STACK;
--Тело
package body STACK is
  SIZE: constant INTEGER := 10;
  SPACE: array(1 .. SIZE) of ELEM;
INDEX: INTEGER range 0 .. SIZE :=0;

procedure PUSH (E: in ELEM, FLAG: out STATUS) is
  begin
  if INDEX = SIZE then FLAG := OVERFLOW
  else
  INDEX := INDEX + 1;
  SPACE(INDEX) := E;
  FLAG := OK;
  end if;
end PUSH;

procedure POP (E: out ELEM, FlAG; out STATUS) is
  begin
  if INDEX = 0 then FLAG := UNDERFLOW
  else 
  E := SPACE(INDEX);
  INDEX := INDEX -1;
  FLAG := OK;
  end if;
end POP;
end STACK;
--структура пользовательского вызова
STACK.PUSH(ELEMENT,STATUS);
STACK.POP(ELEMENT,STATUS);
Компилю: gnatmake STACK.adb -gnat83 -gnatv ПОлучаю:
Compiling: STACK.adb (source file time stamp: 2010-10-16 21:42:42)

     7. type ELEM is INTEGER;
        |
        >>> compilation unit expected

    12. package STACK is
               |
        >>> keyword "body" expected here [see file name]

 39 lines: 2 errors
Помогите понять и починить. :-)

★★★★★

«compilation unit expected» — оно как-бы намекает, что первым в файле должно быть описание «че это», так что скорее всего поможет перенести «package STACK is», так что-бы код с него начинался.

Давно на ada кодил, могу в чем-то и ошибаться.

hydraulicbrakefluid
()

1)в аде, емнип, нельзя объявлять типы вне программных модулей. 2) если компилируешь посредством gnat, то он требует что-бы интерфейс и тело находилось в разных файлах.

интерфейс: stack.ads тело: stack.adb

kyz
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.