Mark McGranaghan 8d31ec147c move to vendor
2012-11-17 08:21:42 -08:00

212 lines
5.0 KiB
Ada

-- Model IED Simulator
-- COL Gene Ressler, 1 December 2007
with Ada.Text_IO;
with Ada.Characters.Latin_1;
use Ada.Characters.Latin_1;
with Ada.Strings.Fixed;
use Ada.Strings.Fixed;
with Ada.Strings;
with Ada.Strings.Bounded;
with Binary_Search;
with Ada.Containers.Generic_Array_Sort;
package body Scanner is
Constant_123 : constant Character := Character'Val (16#00#);
MAX_KEYWORD_LENGTH_C : constant Natural := 24;
New_Constant : constant New_Type
:= 2;
KEYWORDS_C : constant Keyword_Array_T :=
(To_BS("description"),
To_BS("with"));
procedure Blah;
procedure blah is
begin
Declaration:
declare
Joe : Type_Type := Random;
begin
Do_Something;
end Declaration;
Loop_ID:
loop
Loop_Do;
exit when 1=2;
end loop Loop_ID;
if True or else False then
Do_This();
elsif not False and then True then
Do_That;
else
Panic;
end if;
end blah;
function "*" (Left, Right : in Integer) return Integer is
begin
<<Goto_Label>>
goto Goto_Label;
return Left + Right;
end "*";
function Function_Specification
(Param_1 : in Blah;
Param2, param3 : in access Blah_Type := 0)
return It_Type;
package Rename_Check renames Ada.Text_IO;
type New_Float is delta 0.001 digits 12;
package Package_Inst is new Ada.Strings.Bounded.Generic_Bounded_Length
(Max => MAX_KEYWORD_LENGTH_C);
type Array_Decl12 is array (Positive range <>) of SB.Bounded_String;
type Array_Decl3 is array (New_Type range Thing_1 .. Thing_2) of SB.Bounded_String;
type Boring_Type is
(Start,
End_Error);
subtype Sub_Type_check is Character range '0' .. '9';
Initialized_Array : constant Transistion_Array_T :=
(Start =>
(Letter_Lower | Letter_Upper => Saw_Alpha,
' ' | HT | CR | LF => Start,
others => Begin_Error),
End_Error => (others => Start)
);
type Recorder is record
Advance : Boolean;
Return_Token : Token_T;
end record;
for Recorder use 8;
type Null_Record is null record;
type Discriminated_Record (Size : Natural) is
record
A : String (1 .. Size);
end record;
pragma Unchecked_Union (Union);
pragma Convention (C, Union);
type Person is tagged
record
Name : String (1 .. 10);
Gender : Gender_Type;
end record;
type Programmer is new Person with
record
Skilled_In : Language_List;
Favorite_Langauge : Python_Type;
end record;
type Programmer is new Person
and Printable
with
record
Skilled_In : Language_List;
Blah : aliased Integer;
end record;
---------------------
-- Scan_Next_Token --
---------------------
task Cyclic_Buffer_Task_Type is
entry Insert (An_Item : in Item);
entry Remove (An_Item : out Item);
end Cyclic_Buffer_Task_Type;
task body Cyclic_Buffer_Task_Type is
Q_Size : constant := 100;
subtype Q_Range is Positive range 1 .. Q_Size;
Length : Natural range 0 .. Q_Size := 0;
Head, Tail : Q_Range := 1;
Data : array (Q_Range) of Item;
begin
loop
select
when Length < Q_Size =>
accept Insert (An_Item : in Item) do
Data(Tail) := An_Item;
end Insert;
Tail := Tail mod Q_Size + 1;
Length := Length + 1;
or
when Length > 0 =>
accept Remove (An_Item : out Item) do
An_Item := Data(Head);
end Remove;
Head := Head mod Q_Size + 1;
Length := Length - 1;
end select;
end loop;
end Cyclic_Buffer_Task_Type;
procedure Scan_Next_Token
(S : in String;
Start_Index : out Positive;
End_Index : in out Natural; -- Tricky comment
Line_Number : in out Positive;
Token : out Token_T);
procedure Scan_Next_Token
(S : in String;
Start_Index : out Positive;
End_Index : in out Natural; -- Another comment
Line_Number : in out Positive;
Token : out Token_T)
is
begin
Scanner_Loop:
loop
if New_State = End_Error then
exit Scanner_Loop;
end if;
if State = Start and New_State /= Start then
Start_Index := Peek_Index;
end if;
end loop Scanner_Loop;
end Scan_Next_Token;
procedure Advance is
begin
Peek_Index := Peek_Index + 1;
end Advance;
-- Eliminate the leading space that Ada puts in front of positive
-- integer images.
function Image(N : in Integer) return String is
S : String := Integer'Image(N);
begin
if S(1) = ' ' then
return S(2 .. S'Last);
end if;
return S;
end Image;
end Scanner;