From 025cee42eaf5f8b1c409e1a3a8fe3df8dac8d262 Mon Sep 17 00:00:00 2001 From: Elias Haugsbakk Date: Mon, 21 Sep 2026 15:38:24 +0200 Subject: refactor exception handling to differentiate internal exceptions from compilation failer --- .../java/no/eliashaugsbakk/kompilator/Main.java | 53 ++++++---------------- 1 file changed, 15 insertions(+), 38 deletions(-) (limited to 'src/main/java/no/eliashaugsbakk/kompilator/Main.java') 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 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 IR = new IRGenerator(ast).generate(); - String assembly = new AssemblyBuilder().createAssembly(IR); - new AssemblerAndLinker().assembleAndLink(inputProgram.fileName(), assembly); - - System.exit(0); } } -- cgit v1.2.3