aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/shedlang/compiler/parser/SourceParser.java
blob: 8144f11ac77c31243d08d4d4bee052de6e79f282 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package org.shedlang.compiler.parser;

import org.shedlang.compiler.tokeniser.TokenIterator;
import org.shedlang.compiler.types.NamespaceName;
import org.zwobble.sourcetext.SourceText;

import java.util.function.Function;

import static org.shedlang.compiler.parser.Tokeniser.tokenise;

public class SourceParser {
    private SourceParser() {
    }

    public static NamespaceName parseNamespaceName(SourceText sourceText) {
        return parseSource(sourceText, tokens -> Parser.parseNamespaceName(tokens));
    }

    private static <T> T parseSource(
        SourceText sourceText,
        Function<TokenIterator<TokenType>, T> parseTokens
    ) {
        var tokens = tokenise(sourceText);
        var result = parseTokens.apply(tokens);
        tokens.skip(TokenType.END);
        return result;
    }
}