From 971321393c5965dd14eb604e22e907d6b94b0c8a Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 26 Apr 2026 17:11:09 +0100 Subject: Add stubbed Java generator --- .../hobgoblin/compiler/HobgoblinCompiler.java | 12 +++++++++++- .../hobgoblin/compiler/generators/Generator.java | 9 +++++++++ .../compiler/generators/java/JavaGenerator.java | 22 ++++++++++++++++++++++ .../zwobble/hobgoblin/compiler/ExampleTests.java | 3 ++- 4 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 src/main/java/org/zwobble/hobgoblin/compiler/generators/Generator.java create mode 100644 src/main/java/org/zwobble/hobgoblin/compiler/generators/java/JavaGenerator.java (limited to 'src') diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCompiler.java b/src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCompiler.java index d9f7d21..5d59d96 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCompiler.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCompiler.java @@ -1,5 +1,7 @@ package org.zwobble.hobgoblin.compiler; +import org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceNode; +import org.zwobble.hobgoblin.compiler.generators.Generator; import org.zwobble.hobgoblin.compiler.parser.Parser; import org.zwobble.hobgoblin.compiler.typechecker.TypeChecker; import org.zwobble.hobgoblin.compiler.typechecker.TypeCheckerGlobalContext; @@ -12,6 +14,7 @@ import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; +import java.util.List; public class HobgoblinCompiler { public static final String FILE_NAME_EXTENSION = ".hob"; @@ -19,10 +22,12 @@ public class HobgoblinCompiler { private HobgoblinCompiler() { } - public static void compile(Path projectRoot) throws IOException { + public static void compile(Path projectRoot, List generators) throws IOException { var sourceDirectory = projectRoot.resolve("src"); var sourceFiles = sourceDirectory.toFile() .listFiles(file -> file.toPath().toString().endsWith(FILE_NAME_EXTENSION)); + + var typedNamespaceNodes = new ArrayList(); for (var sourceFile : sourceFiles) { var namespaceName = sourceFileNamespaceName(sourceDirectory, sourceFile.toPath()); var sourceContents = Files.readString(sourceFile.toPath(), StandardCharsets.UTF_8); @@ -33,6 +38,11 @@ public class HobgoblinCompiler { typeCheckerContext.addBuiltinScalarType(new ScalarType("Int32")); var typedNamespaceNode = TypeChecker.typeCheckNamespace(untypedNamespaceNode, typeCheckerContext); + typedNamespaceNodes.add(typedNamespaceNode); + } + + for (var generator : generators) { + generator.generate(typedNamespaceNodes); } } diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/generators/Generator.java b/src/main/java/org/zwobble/hobgoblin/compiler/generators/Generator.java new file mode 100644 index 0000000..2457609 --- /dev/null +++ b/src/main/java/org/zwobble/hobgoblin/compiler/generators/Generator.java @@ -0,0 +1,9 @@ +package org.zwobble.hobgoblin.compiler.generators; + +import org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceNode; + +import java.util.List; + +public interface Generator { + void generate(List namespaces); +} diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/generators/java/JavaGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/generators/java/JavaGenerator.java new file mode 100644 index 0000000..ced3d81 --- /dev/null +++ b/src/main/java/org/zwobble/hobgoblin/compiler/generators/java/JavaGenerator.java @@ -0,0 +1,22 @@ +package org.zwobble.hobgoblin.compiler.generators.java; + +import org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceNode; +import org.zwobble.hobgoblin.compiler.generators.Generator; + +import java.nio.file.Path; +import java.util.List; + +public class JavaGenerator implements Generator { + private final Path root; + private final String packageName; + + public JavaGenerator(Path root, String packageName) { + this.root = root; + this.packageName = packageName; + } + + @Override + public void generate(List namespaces) { + + } +} diff --git a/src/test/java/org/zwobble/hobgoblin/compiler/ExampleTests.java b/src/test/java/org/zwobble/hobgoblin/compiler/ExampleTests.java index 354cb08..e892cd9 100644 --- a/src/test/java/org/zwobble/hobgoblin/compiler/ExampleTests.java +++ b/src/test/java/org/zwobble/hobgoblin/compiler/ExampleTests.java @@ -4,6 +4,7 @@ import org.junit.jupiter.api.DynamicTest; import org.junit.jupiter.api.TestFactory; import java.io.IOException; +import java.util.List; import java.util.stream.Stream; public class ExampleTests { @@ -17,6 +18,6 @@ public class ExampleTests { } private void runTest(ExampleSet exampleSet) throws IOException { - HobgoblinCompiler.compile(exampleSet.path()); + HobgoblinCompiler.compile(exampleSet.path(), List.of()); } } -- cgit v1.2.3