blob: 761e7b8ad38572351037fc4d5f4676e4852985c6 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
package org.zwobble.mammoth.styles.parsing;
import org.parboiled.BaseParser;
import org.parboiled.Parboiled;
import org.parboiled.Rule;
import org.parboiled.parserunners.ReportingParseRunner;
import org.parboiled.support.ParsingResult;
import java.util.function.Function;
public class Parsing {
public static <T, U extends BaseParser<T>> T parse(Class<U> parserType, Function<U, Rule> rule, String value) {
U parser = Parboiled.createParser(parserType);
ReportingParseRunner<T> runner = new ReportingParseRunner<>(rule.apply(parser));
ParsingResult<T> result = runner.run(value);
if (result.hasErrors()) {
// TODO: wrap in result
throw new RuntimeException("Parse error");
} else {
return result.valueStack.peek();
}
}
}
|