Add A command line parsing procedure

This commit is contained in:
2025-05-31 11:27:23 +02:00
parent a93d12eb50
commit 23885e5b95
13 changed files with 760 additions and 396 deletions

View File

@ -1,18 +1,50 @@
MODULE Compiler;
FROM FIO IMPORT StdIn;
FROM FIO IMPORT Close, IsNoError, File, OpenToRead, StdErr, StdOut, WriteLine, WriteString;
FROM SYSTEM IMPORT ADR;
FROM M2RTS IMPORT HALT, ExitOnHalt;
FROM Lexer IMPORT Lexer, lexer_destroy, lexer_initialize;
FROM Transpiler IMPORT transpile;
FROM CommandLineInterface IMPORT PCommandLine, parse_command_line;
VAR
command_line: PCommandLine;
PROCEDURE compile_from_stream();
VAR
lexer: Lexer;
source_input: File;
BEGIN
lexer_initialize(ADR(lexer), StdIn);
source_input := OpenToRead(command_line^.input);
transpile(ADR(lexer));
IF IsNoError(source_input) = FALSE THEN
WriteString(StdErr, 'Fatal error: failed to read the input file "');
WriteString(StdErr, command_line^.input);
WriteString(StdErr, '".');
WriteLine(StdErr);
lexer_destroy(ADR(lexer))
ExitOnHalt(2)
END;
IF IsNoError(source_input) THEN
lexer_initialize(ADR(lexer), source_input);
transpile(ADR(lexer), StdOut);
lexer_destroy(ADR(lexer));
Close(source_input)
END
END compile_from_stream;
BEGIN
ExitOnHalt(0);
command_line := parse_command_line();
IF command_line <> NIL THEN
compile_from_stream()
END;
IF command_line = NIL THEN
ExitOnHalt(1)
END;
HALT()
END Compiler.