aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-10-22 22:45:37 +0100
committerMichael Williamson <mike@zwobble.org>2023-10-22 22:45:37 +0100
commitac6c30e9383cf4da05a98c8397e88f39cfa39834 (patch)
treef8d38d56ceb77bbcf593238727aa9be4e93c57e4 /src/main/java
parent732f95b8b9e66e1e7324f90ae1bb3e285b1b497f (diff)
Use namespace name parser in config parser
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/config/BinConfig.java6
-rw-r--r--src/main/java/org/shedlang/compiler/parser/StringParser.java29
2 files changed, 31 insertions, 4 deletions
diff --git a/src/main/java/org/shedlang/compiler/config/BinConfig.java b/src/main/java/org/shedlang/compiler/config/BinConfig.java
index 1fe9b17e..f0d733a2 100644
--- a/src/main/java/org/shedlang/compiler/config/BinConfig.java
+++ b/src/main/java/org/shedlang/compiler/config/BinConfig.java
@@ -1,18 +1,16 @@
package org.shedlang.compiler.config;
+import org.shedlang.compiler.parser.StringParser;
import org.shedlang.compiler.types.NamespaceName;
import org.tomlj.TomlTable;
-import java.util.Arrays;
-
public record BinConfig(String name, NamespaceName mainNamespace) {
public static BinConfig fromToml(TomlTable table) {
var name = table.getString("name");
var mainNamespaceString = table.getString("main-namespace");
// TODO: error checking
- // TODO: extract namespace name parsing
- var mainNamespace = new NamespaceName(Arrays.asList(mainNamespaceString.split("/")));
+ var mainNamespace = StringParser.parseNamespaceName(mainNamespaceString);
return new BinConfig(name, mainNamespace);
}
diff --git a/src/main/java/org/shedlang/compiler/parser/StringParser.java b/src/main/java/org/shedlang/compiler/parser/StringParser.java
new file mode 100644
index 00000000..37a85667
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/parser/StringParser.java
@@ -0,0 +1,29 @@
+package org.shedlang.compiler.parser;
+
+import org.shedlang.compiler.sources.Sources;
+import org.shedlang.compiler.tokeniser.TokenIterator;
+import org.shedlang.compiler.types.NamespaceName;
+
+import java.util.function.Function;
+
+import static org.shedlang.compiler.parser.Tokeniser.tokenise;
+
+public class StringParser {
+ private StringParser() {
+ }
+
+ public static NamespaceName parseNamespaceName(String value) {
+ return parseString(value, tokens -> Parser.parseNamespaceName(tokens));
+ }
+
+ private static <T> T parseString(
+ String sourceContents,
+ Function<TokenIterator<TokenType>, T> parseTokens
+ ) {
+ var source = Sources.file("<string>", sourceContents);
+ var tokens = tokenise(source);
+ var result = parseTokens.apply(tokens);
+ tokens.skip(TokenType.END);
+ return result;
+ }
+}