You've already forked gnatstudio
mirror of
https://github.com/AdaCore/gnatstudio.git
synced 2026-02-12 12:42:33 -08:00
60 lines
1.3 KiB
Ada
60 lines
1.3 KiB
Ada
with Except;
|
|
with Screen_Output;
|
|
with Stack;
|
|
with Values;
|
|
|
|
package body Instructions is
|
|
|
|
----------
|
|
-- Read --
|
|
----------
|
|
|
|
function Read (Word : String) return Instruction is
|
|
begin
|
|
-- Loop through each instruction asking if its string representation
|
|
-- matches the word we have just encountered in the input.
|
|
|
|
for I in Instruction loop
|
|
-- Technical Note: Given a scalar type (such as an integer, an
|
|
-- enumeration, etc), Type'Image (X) returns the value of X
|
|
-- converted to a string.
|
|
|
|
if Instruction'Image (I) = Word then
|
|
return I;
|
|
end if;
|
|
end loop;
|
|
|
|
-- If we have found an unrecognized instruction raise an exception.
|
|
|
|
raise Except.User_Error;
|
|
end Read;
|
|
|
|
-------------
|
|
-- Process --
|
|
-------------
|
|
|
|
procedure Process (I : Instruction) is
|
|
begin
|
|
case I is
|
|
when Clear =>
|
|
Stack.Clear;
|
|
|
|
when Print =>
|
|
Screen_Output.Msg (" -> ", End_Line => False);
|
|
|
|
if Stack.Empty then
|
|
Screen_Output.Msg ("stack is empty");
|
|
else
|
|
Screen_Output.Msg (Values.To_String (Stack.Top));
|
|
end if;
|
|
|
|
when Quit =>
|
|
raise Except.Exit_SDC;
|
|
|
|
end case;
|
|
end Process;
|
|
|
|
end Instructions;
|
|
|
|
|