From ca311896123cef55820cf04dba15f6599c0351af Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 11 Jun 2023 13:08:47 +0100 Subject: Parser main config --- .../java/org/shedlang/compiler/ShedCompiler.java | 5 ++++ .../shedlang/compiler/config/ProjectConfig.java | 33 ++++++++++++++++++++++ .../org/shedlang/compiler/types/NamespaceName.java | 10 +++++++ 3 files changed, 48 insertions(+) create mode 100644 src/main/java/org/shedlang/compiler/config/ProjectConfig.java create mode 100644 src/main/java/org/shedlang/compiler/types/NamespaceName.java (limited to 'src/main/java') diff --git a/src/main/java/org/shedlang/compiler/ShedCompiler.java b/src/main/java/org/shedlang/compiler/ShedCompiler.java index 102d7c6f..24455816 100644 --- a/src/main/java/org/shedlang/compiler/ShedCompiler.java +++ b/src/main/java/org/shedlang/compiler/ShedCompiler.java @@ -1,5 +1,6 @@ package org.shedlang.compiler; +import org.shedlang.compiler.config.ProjectConfig; import org.shedlang.compiler.parser.Parser; import org.shedlang.compiler.sources.Sources; import org.shedlang.compiler.stackir.InstructionSerializer; @@ -27,6 +28,10 @@ import static org.shedlang.compiler.parser.Tokeniser.tokenise; public class ShedCompiler { public void compile(Path projectRoot) throws IOException { + var config = ProjectConfig.read(projectRoot); + + System.out.println("main: " + config.main()); + var sourceRoot = projectRoot.resolve("src"); var sourceFilePaths = collectSourceFilePaths(sourceRoot); diff --git a/src/main/java/org/shedlang/compiler/config/ProjectConfig.java b/src/main/java/org/shedlang/compiler/config/ProjectConfig.java new file mode 100644 index 00000000..faa12c0b --- /dev/null +++ b/src/main/java/org/shedlang/compiler/config/ProjectConfig.java @@ -0,0 +1,33 @@ +package org.shedlang.compiler.config; + +import org.shedlang.compiler.types.NamespaceName; +import org.tomlj.Toml; +import org.tomlj.TomlTable; + +import java.io.IOException; +import java.nio.file.Path; +import java.util.Arrays; + +public class ProjectConfig { + public static ProjectConfig read(Path projectPath) throws IOException { + var result = Toml.parse(projectPath.resolve("shed.toml")); + if (result.hasErrors()) { + throw result.errors().get(0); + } + + return new ProjectConfig(result); + } + + private final TomlTable config; + + public ProjectConfig(TomlTable config) { + this.config = config; + } + + public NamespaceName main() { + var string = config.getString("shed.main"); + // TODO: error checking + // TODO: extract namespace name parsing + return new NamespaceName(Arrays.asList(string.split("/"))); + } +} diff --git a/src/main/java/org/shedlang/compiler/types/NamespaceName.java b/src/main/java/org/shedlang/compiler/types/NamespaceName.java new file mode 100644 index 00000000..a064d699 --- /dev/null +++ b/src/main/java/org/shedlang/compiler/types/NamespaceName.java @@ -0,0 +1,10 @@ +package org.shedlang.compiler.types; + +import java.util.List; + +public record NamespaceName(List parts) { + @Override + public String toString() { + return String.join("/", parts); + } +} -- cgit v1.2.3