public void ParseDeclFile()
 {
     var ebnfParser = new EbnfParser();
     var content = File.ReadAllText("TestParserDef\\ValidParserDef.txt");
     Dictionary<string, Declare> decls;
     ebnfParser.TryParseDeclFile(content, out decls).IsTrue();
 }
        public void TestMethod1()
        {
            var ebnfParser = new EbnfParser();
            SyntaxNode syntaxNode;
            ebnfParser.TryParseExpression("'a'",out syntaxNode).IsTrue();
            syntaxNode.IsInstanceOf<CharLiteral>().Is( l=>l.Value=='a');
            ebnfParser.TryParseExpression("[a..z]", out syntaxNode).IsTrue();
            syntaxNode.IsInstanceOf<CharRangeLiteral>().Is(l => l.Begin=='a' && l.End=='z' );
            ebnfParser.TryParseExpression("[0123456789]", out syntaxNode).IsTrue();
            syntaxNode.IsInstanceOf<CharSetLiteral>().Is(l => l.Chars.Count==10 && l.Chars.Contains('5') );
            ebnfParser.TryParseExpression("a", out syntaxNode).IsTrue();
            syntaxNode.IsInstanceOf<NameReference>().Is(l=>l.Name=="a");
            ebnfParser.TryParseExpression("\"a\"",out syntaxNode).IsTrue();
            syntaxNode.IsInstanceOf<StringLiteral>().Is(l=>l.Value=="a");
            ebnfParser.TryParseExpression("`char.IsDigit`", out syntaxNode).IsTrue();
            syntaxNode.IsInstanceOf<LambdaLiteral>().Is(l => l.LambdaText == "char.IsDigit");
            ebnfParser.TryParseExpression("a b", out syntaxNode).IsTrue();
            syntaxNode.IsInstanceOf<Concat>().Is( c=>c.Describe()=="([a]+[b])");
            ebnfParser.TryParseExpression("a? b", out syntaxNode).IsTrue();
            syntaxNode.IsInstanceOf<Concat>().Is(c => c.Describe() == "(([a])?+[b])");
            ebnfParser.TryParseExpression("a* b", out syntaxNode).IsTrue();
            syntaxNode.IsInstanceOf<Concat>().Is(c => c.Describe() == "(([a])*+[b])");
            ebnfParser.TryParseExpression("a+ b", out syntaxNode).IsTrue();
            syntaxNode.IsInstanceOf<Concat>().Is(c => c.Describe() == "(([a])++[b])");
            ebnfParser.TryParseExpression("a|b", out syntaxNode).IsTrue();
            syntaxNode.IsInstanceOf<Alternative>().Is(a => a.Describe() == "([a]|[b])");
            ebnfParser.TryParseExpression("a|b|c", out syntaxNode).IsTrue();
            syntaxNode.IsInstanceOf<Alternative>().Is(a => a.Describe() == "([a]|[b]|[c])");
            ebnfParser.TryParseExpression("a b|c", out syntaxNode).IsTrue();
            syntaxNode.IsInstanceOf<Alternative>().Is(a => a.Describe() == "(([a]+[b])|[c])");
            ebnfParser.TryParseExpression("(a|b) d", out syntaxNode).IsTrue();
            syntaxNode.IsInstanceOf<Concat>().Is(a => a.Describe() == "(([a]|[b])+[d])");
            ebnfParser.TryParseExpression("a:first a:next a:last", out syntaxNode).IsTrue();
            syntaxNode.IsInstanceOf<Concat>().Is(a => a.Describe() == "(([a]->first)+([a]->next)+([a]->last))");

            ebnfParser.TryParseExpression("a:first a:next a:last { this is code }", out syntaxNode).IsTrue();
            syntaxNode.IsInstanceOf<CodeAnotation>().Is(a => a.Describe() == "((([a]->first)+([a]->next)+([a]->last))=>{ this is code })");
        }