package compiler.util; import static grammar.GrammarDSL.endOfInput; import static grammar.GrammarDSL.seq; import static trees.MatchSpec.rule; import driver.Context; import grammar.Expression; import grammar.Grammar; import parser.Match; import parser.Matcher; import source.Source; import source.SourceString; /** * Utility function to parse strings. */ public class StringMatcher { /****************************************************************************/ public static Match matchString(String string, String rule) { Source source = new SourceString(string); Matcher matcher = new Matcher(source); Grammar grammar = Context.get().grammar(); Expression wrap = grammar.clean(seq(grammar.rule(rule), endOfInput)); if (matcher.matches(wrap)) { return matcher.match().first(rule(rule)); } else { throw new Error(matcher.errors().report(source)); } } }