diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-10-22 22:45:37 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-10-22 22:45:37 +0100 |
| commit | ac6c30e9383cf4da05a98c8397e88f39cfa39834 (patch) | |
| tree | f8d38d56ceb77bbcf593238727aa9be4e93c57e4 /src/main/java | |
| parent | 732f95b8b9e66e1e7324f90ae1bb3e285b1b497f (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.java | 6 | ||||
| -rw-r--r-- | src/main/java/org/shedlang/compiler/parser/StringParser.java | 29 |
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; + } +} |
