Add a command line parsing procedure

This commit is contained in:
2025-05-31 11:28:24 +02:00
parent 6e415e474f
commit 1983ef8e71
13 changed files with 1097 additions and 412 deletions

View File

@ -1,18 +1,51 @@
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;
proc compile_from_stream();
var
lexer: Lexer;
source_input: File;
begin
source_input := OpenToRead(command_line^.input);
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);
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;
begin
lexer_initialize(ADR(lexer), StdIn);
ExitOnHalt(0);
command_line := parse_command_line();
transpile(ADR(lexer));
lexer_destroy(ADR(lexer))
if command_line <> nil then
compile_from_stream()
end;
if command_line = nil then
ExitOnHalt(1)
end;
HALT()
end Compiler.