summaryrefslogtreecommitdiff
path: root/src/main/java/no/eliashaugsbakk/kompilator/Main.java
diff options
context:
space:
mode:
authorElias Haugsbakk <[email protected]>2026-09-21 15:38:24 +0200
committerElias Haugsbakk <[email protected]>2026-09-21 15:38:24 +0200
commit025cee42eaf5f8b1c409e1a3a8fe3df8dac8d262 (patch)
tree98674234b46b1c7c745a1ec01d21ab10276d938f /src/main/java/no/eliashaugsbakk/kompilator/Main.java
parentef85091be57ecef84e97799d56b3d9c4600ca1c2 (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.java53
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);
}
}