Ejemplo n.º 1
0
		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);
		}
Ejemplo n.º 2
0
        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");
        }
Ejemplo n.º 3
0
		public void BnfParsingSpeed()
		{
			var bnfParser = new BnfGrammar();
			Helper.TestSpeed(bnfParser, postalAddressBnf, speedIterations);
		}
Ejemplo n.º 4
0
		public static Grammar GetAddressParser()
		{
			var bnfParser = new BnfGrammar();
			return bnfParser.Build(postalAddressBnf, "postal-address");
		}
Ejemplo n.º 5
0
		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);
		}