
After go1.16, go will use module mode by default, even when the repository is checked out under GOPATH or in a one-off directory. Add go.mod, go.sum to keep this repo buildable without opting out of the module mode. > go mod init github.com/mmcgrana/gobyexample > go mod tidy > go mod vendor In module mode, the 'vendor' directory is special and its contents will be actively maintained by the go command. pygments aren't the dependency the go will know about, so it will delete the contents from vendor directory. Move it to `third_party` directory now. And, vendor the blackfriday package. Note: the tutorial contents are not affected by the change in go1.16 because all the examples in this tutorial ask users to run the go command with the explicit list of files to be compiled (e.g. `go run hello-world.go` or `go build command-line-arguments.go`). When the source list is provided, the go command does not have to compute the build list and whether it's running in GOPATH mode or module mode becomes irrelevant.
212 lines
5.0 KiB
Ada
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;
|