diff options
| author | Elias Haugsbakk <[email protected]> | 2026-09-21 15:38:24 +0200 |
|---|---|---|
| committer | Elias Haugsbakk <[email protected]> | 2026-09-21 15:38:24 +0200 |
| commit | 025cee42eaf5f8b1c409e1a3a8fe3df8dac8d262 (patch) | |
| tree | 98674234b46b1c7c745a1ec01d21ab10276d938f /src/main/java/no/eliashaugsbakk/kompilator/Main.java | |
| parent | ef85091be57ecef84e97799d56b3d9c4600ca1c2 (diff) | |
refactor exception handling to differentiate internal exceptions from compilation failerdev
Diffstat (limited to 'src/main/java/no/eliashaugsbakk/kompilator/Main.java')
| -rw-r--r-- | src/main/java/no/eliashaugsbakk/kompilator/Main.java | 53 |
1 files changed, 15 insertions, 38 deletions
diff --git a/src/main/java/no/eliashaugsbakk/kompilator/Main.java b/src/main/java/no/eliashaugsbakk/kompilator/Main.java index 62a93c7..67b97af 100644 --- a/src/main/java/no/eliashaugsbakk/kompilator/Main.java +++ b/src/main/java/no/eliashaugsbakk/kompilator/Main.java @@ -4,16 +4,13 @@ import java.util.Arrays; import java.util.List; import no.eliashaugsbakk.kompilator.IO.File; import no.eliashaugsbakk.kompilator.IO.FileReaderWriter; -import no.eliashaugsbakk.kompilator.IO.FileReaderWriterException; import no.eliashaugsbakk.kompilator.IRGeneration.IRGenerator; import no.eliashaugsbakk.kompilator.IRGeneration.Instructions.Instruction; import no.eliashaugsbakk.kompilator.asmGeneration.AssemblyBuilder; import no.eliashaugsbakk.kompilator.assembleAndLink.AssemblerAndLinker; import no.eliashaugsbakk.kompilator.parsing.AST; import no.eliashaugsbakk.kompilator.parsing.Parser; -import no.eliashaugsbakk.kompilator.parsing.ParserException; import no.eliashaugsbakk.kompilator.semanticAnalysis.Analyzer; -import no.eliashaugsbakk.kompilator.semanticAnalysis.SemanticException; import no.eliashaugsbakk.kompilator.tokenization.Lexer; import no.eliashaugsbakk.kompilator.tokenization.Token; @@ -23,52 +20,32 @@ public class Main { static void main(String[] args) { - if (args.length == 0) { - IO.println("feil: Filsti må angis."); + try { + compile(args); + } catch (CompilationException e) { + IO.println("feil: " + e.getMessage()); System.exit(1); } + } - VERBOSE = Arrays.asList(args).contains("--verbose") - || Arrays.asList(args).contains("-v"); + private static void compile(String[] args) throws CompilationException { + if (args.length == 0) { + throw new CompilationException("Filsti må angis."); + } - String inputFileName = args[0]; + VERBOSE = Arrays.asList(args).contains("--verbose") || Arrays.asList(args).contains("-v"); + String inputFileName = args[0]; if (!inputFileName.endsWith("." + programFileExtension)) { - IO.println("feil: Inndatafilen må ha filendelsen: " + programFileExtension); - System.exit(1); - } - - File inputProgram = null; - FileReaderWriter fileReaderWriter = new FileReaderWriter(); - try { - inputProgram = fileReaderWriter.readFile(inputFileName); - } catch (FileReaderWriterException e) { - IO.println("feil: Kunne ikke lese inndatafilen: " + inputFileName + "\n\n" + e.getMessage()); - System.exit(1); + throw new CompilationException("Inndatafilen må ha filendelsen: " + programFileExtension); } + File inputProgram = new FileReaderWriter().readFile(inputFileName); List<Token> tokens = new Lexer(inputProgram.fileBody()).tokenize(); - AST ast = null; - try { - ast = new Parser(tokens).parse(); - } catch (ParserException e) { - IO.println(e.getMessage()); - System.exit(1); - } - - try { - new Analyzer(ast).analyze(); - } catch (SemanticException e) { - IO.println(e.getMessage()); - System.exit(1); - } - + AST ast = new Parser(tokens).parse(); + new Analyzer(ast).analyze(); List<Instruction> IR = new IRGenerator(ast).generate(); - String assembly = new AssemblyBuilder().createAssembly(IR); - new AssemblerAndLinker().assembleAndLink(inputProgram.fileName(), assembly); - - System.exit(0); } } |
