diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-06-11 13:08:47 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-06-11 13:08:47 +0100 |
| commit | ca311896123cef55820cf04dba15f6599c0351af (patch) | |
| tree | 07daaa2d0272d0beda9fa5cdafa6430cd9d5a764 /src/main/java | |
| parent | aa7ae2695c1ee5b919832b84df401614a7500a27 (diff) | |
Parser main config
Diffstat (limited to 'src/main/java')
3 files changed, 48 insertions, 0 deletions
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<String> parts) { + @Override + public String toString() { + return String.join("/", parts); + } +} |
