Working argument parser
This commit is contained in:
parent
3ee47e2a77
commit
322cf64183
51
src/main.adb
51
src/main.adb
|
@ -10,19 +10,19 @@ with Ada.Strings.Unbounded;
|
|||
-- @return
|
||||
-- @description Main Function call
|
||||
procedure Main is
|
||||
type InstructionList is array(1..65536) of String(1..64);
|
||||
type InstructionList is array (1 .. 65_536) of String (1 .. 64);
|
||||
type ArgumentParserState is
|
||||
(PSInit, PSFilename, PSLanguage, PSRecycle, PSFinish, PSError);
|
||||
type FileList is array(1..128) of Unbounded.Unbounded_String;
|
||||
ParserState : ArgumentParserState := Init;
|
||||
Filename : Unbounded.Unbounded_String :=
|
||||
Unbounded.To_Unbounded_String ("bin.out");
|
||||
Language : Unbounded.Unbounded_String :=
|
||||
Unbounded.To_Unbounded_String ("VHDL");
|
||||
type FileList is array (1 .. 128) of Ada.Strings.Unbounded.Unbounded_String;
|
||||
ParserState : ArgumentParserState := PSInit;
|
||||
Filename : Ada.Strings.Unbounded.Unbounded_String :=
|
||||
Ada.Strings.Unbounded.To_Unbounded_String ("bin.out");
|
||||
Language : Ada.Strings.Unbounded.Unbounded_String :=
|
||||
Ada.Strings.Unbounded.To_Unbounded_String ("VHDL");
|
||||
Recycle : Boolean := False;
|
||||
InputFileList : FileList;
|
||||
InputFileListIndex : Integer := 1;
|
||||
Argument : String;
|
||||
Argument : Ada.Strings.Unbounded.Unbounded_String;
|
||||
|
||||
Argumenterror : exception;
|
||||
Languageoptionerror : exception;
|
||||
|
@ -30,31 +30,33 @@ begin
|
|||
|
||||
-- Check input file limit for arguments and lowest argument
|
||||
if Ada.Command_Line.Argument_Count > 128 then
|
||||
Text_IO.Put_Line ("To many arguments!");
|
||||
Ada.Text_IO.Put_Line ("To many arguments!");
|
||||
elsif Ada.Command_Line.Argument_Count < 2 then
|
||||
Text_IO.Put_Line ("Not enough arguments!");
|
||||
Ada.Text_IO.Put_Line ("Not enough arguments!");
|
||||
end if;
|
||||
|
||||
for Index in 1 .. Ada.Command_Line.Argument_Count loop
|
||||
Argument := Command_Line.Argument(Index);
|
||||
Argument :=
|
||||
Ada.Strings.Unbounded.To_Unbounded_String
|
||||
(Ada.Command_Line.Argument (Index));
|
||||
case ParserState is
|
||||
when Init =>
|
||||
if Argument = "-o" then
|
||||
when PSInit =>
|
||||
if Ada.Strings.Unbounded.To_String (Argument) = "-o" then
|
||||
ParserState := PSFilename;
|
||||
elsif Argument = "-x" then
|
||||
elsif Ada.Strings.Unbounded.To_String (Argument) = "-x" then
|
||||
ParserState := PSLanguage;
|
||||
elsif Argument = "-r" then
|
||||
elsif Ada.Strings.Unbounded.To_String (Argument) = "-r" then
|
||||
ParserState := PSRecycle;
|
||||
else
|
||||
ParserState := PSError;
|
||||
end if;
|
||||
when Filename =>
|
||||
when PSFilename =>
|
||||
ParserState := PSInit;
|
||||
Filename := Unbounded.To_Unbounded_String (Argument);
|
||||
when Language =>
|
||||
Filename := Argument;
|
||||
when PSLanguage =>
|
||||
ParserState := PSInit;
|
||||
Language := PSUnbounded.To_Unbounded_String (Argument);
|
||||
when Recycle =>
|
||||
Language := Argument;
|
||||
when PSRecycle =>
|
||||
ParserState := PSInit;
|
||||
Recycle := True;
|
||||
when PSError =>
|
||||
|
@ -72,9 +74,12 @@ begin
|
|||
end loop;
|
||||
|
||||
-- Check the language for correct values
|
||||
if not (Language = "VHDL" or Language = "C") then
|
||||
Text_Io.Put_Line
|
||||
("ERROR: The language " & Unbounded.To_String (Language) &
|
||||
if not
|
||||
(Ada.Strings.Unbounded.To_String (Language) = "VHDL" or
|
||||
Ada.Strings.Unbounded.To_String (Language) = "C")
|
||||
then
|
||||
Ada.Text_IO.Put_Line
|
||||
("ERROR: The language " & Ada.Strings.Unbounded.To_String (Language) &
|
||||
" is not available!");
|
||||
raise Languageoptionerror;
|
||||
end if;
|
||||
|
|
Loading…
Reference in New Issue