public void BnfToCode() { // roundtrip to generated code then back again var bnfParser = new BnfGrammar(); // generate code from bnf var code = bnfParser.ToCode(postalAddressBnf, "postal-address", "PostalGrammar"); // execute the code and test var addressParser = Helper.Create<Grammar>(code, "PostalGrammar"); TestAddress(addressParser); }
private static string GetCode(CommandLineOptions opts) { switch (Path.GetExtension(opts.GrammarFile)) { case ".bnf": var gr = new BnfGrammar(); return gr.ToCode(File.ReadAllText(opts.GrammarFile), opts.StartParser, opts.GrammarName); case ".ebnf": var egr = new EbnfGrammar(EbnfStyle.W3c | EbnfStyle.SquareBracketAsOptional | EbnfStyle.WhitespaceSeparator); return egr.ToCode(File.ReadAllText(opts.GrammarFile), opts.StartParser, opts.GrammarName); case ".gold": var ggr = new GoldGrammar(); return ggr.ToCode(File.ReadAllText(opts.GrammarFile), opts.GrammarName); } throw new Exception("Unknown Grammar. Try .ebnf .bnf .gold"); }
public void BnfParsingSpeed() { var bnfParser = new BnfGrammar(); Helper.TestSpeed(bnfParser, postalAddressBnf, speedIterations); }
public static Grammar GetAddressParser() { var bnfParser = new BnfGrammar(); return bnfParser.Build(postalAddressBnf, "postal-address"); }
public void Simple() { var grammarString = @" <ws> ::= <WhiteSpace> <ws> | <simple-value> ::= <simple-value> <LetterOrDigit> | <simple-value> <bracket-value> ::= <bracket-value> <simple-value> | <bracket-value> <optional-bracket> ::= '(' <bracket-value> ')' | <simple-value> <first> ::= <optional-bracket> <second> ::= <optional-bracket> <grammar> ::= <ws> <first> <second> <ws> "; var input = " hello ( parsing world ) "; // our grammar var grammar = new BnfGrammar().Build(grammarString, "grammar"); var match = grammar.Match(input); Assert.IsTrue(match.Success); Assert.AreEqual("hello", match["first"]["simple-value", true].Text); Assert.AreEqual("parsing world", match["second"]["bracket-value", true].Text); }