Exemplo n.º 1
0
        public static void TestScript()
        {
            var parserInstance = new ScriptParser();
            var builder        = new ParserBuilder <ScriptToken, object>();
            var parserBuild    = builder.BuildParser(parserInstance, ParserType.EBNF_LL_RECURSIVE_DESCENT, "test");

            if (parserBuild.IsOk)
            {
                var    parser = parserBuild.Result;
                string ko1    = "|B|test2(a, b, c=100)|E|";
                string ko2    = "|B|plotshape(data, style=shapexcross)|E|";

                var r        = parser.Parse(ko1);
                var graphviz = new GraphVizEBNFSyntaxTreeVisitor <ScriptToken>();
                var root     = graphviz.VisitTree(r.SyntaxTree);
                var graph    = graphviz.Graph.Compile();
                r = parser.Parse(ko2);
            }
            else
            {
                foreach (var e in parserBuild.Errors)
                {
                    Console.WriteLine(e.Level + " - " + e.Message);
                }
            }
        }
Exemplo n.º 2
0
        private static Expression Parse(string query)
        {
            var parserInstance = new EarlyEosParser();
            var builder        = new ParserBuilder <EarlyEosToken, Expression>();

            var buildResult =
                builder.BuildParser(parserInstance, ParserType.EBNF_LL_RECURSIVE_DESCENT, "expression");

            if (buildResult.IsError)
            {
                throw new AggregateException(
                          buildResult.Errors
                          .Select(e => new Exception($"{e.Level} {e.Code} {e.Message}"))
                          );
            }
            var parser = buildResult.Result;

            var queryExpression = parser.Parse(query.Trim());

            var    graphviz = new GraphVizEBNFSyntaxTreeVisitor <EarlyEosToken>();
            var    root     = graphviz.VisitTree(queryExpression.SyntaxTree);
            string graph    = graphviz.Graph.Compile();

            ;

            if (queryExpression.IsError)
            {
                throw new AggregateException(
                          queryExpression.Errors
                          .Select(e => new Exception(e.ErrorMessage))
                          );
            }

            return(queryExpression.Result);
        }
Exemplo n.º 3
0
        public void SyntaxTreeGraphVizTest()
        {
            var StartingRule   = $"{typeof(SimpleExpressionParser).Name}_expressions";
            var parserInstance = new SimpleExpressionParser();
            var builder        = new ParserBuilder <ExpressionToken, int>();
            var Parser         = builder.BuildParser(parserInstance, ParserType.LL_RECURSIVE_DESCENT, StartingRule);
            var result         = Parser.Result.Parse("1+1");

            var    tree     = result.SyntaxTree;
            var    graphviz = new GraphVizEBNFSyntaxTreeVisitor <ExpressionToken>();
            var    root     = graphviz.VisitTree(tree);
            string graph    = graphviz.Graph.Compile();
        }
Exemplo n.º 4
0
        private static void TestGraphViz()
        {
            var    StartingRule   = $"{typeof(SimpleExpressionParser).Name}_expressions";
            var    parserInstance = new SimpleExpressionParser();
            var    builder        = new ParserBuilder <ExpressionToken, int>();
            var    parser         = builder.BuildParser(parserInstance, ParserType.LL_RECURSIVE_DESCENT, StartingRule);
            var    result         = parser.Result.Parse("2 + 2 * 3");
            var    tree           = result.SyntaxTree;
            var    graphviz       = new GraphVizEBNFSyntaxTreeVisitor <ExpressionToken>();
            var    root           = graphviz.VisitTree(tree);
            string graph          = graphviz.Graph.Compile();

            File.Delete("c:\\temp\\tree.dot");
            File.AppendAllText("c:\\temp\\tree.dot", graph);
        }
Exemplo n.º 5
0
        public static void TestScriptRight()
        {
            var parserInstance = new ScriptParserRight();
            var builder        = new ParserBuilder <ScriptToken, object>();
            var parserBuild    = builder.BuildParser(parserInstance, ParserType.EBNF_LL_RECURSIVE_DESCENT, "test");

            if (parserBuild.IsOk)
            {
                var    parser   = parserBuild.Result;
                string ok1      = @"|B|study(""Name or something"", overlay)|E|";
                string ok2      = "|B|test(close, 123, open)|E|";
                string kw       = "|B|test(kw=123)|E|";
                string ko1      = "|B|test2(a, b, c=100, d=200)|E|";
                string ko2      = "|B|plotshape(data, style=shapexcross)|E|";
                string ko3      = "|B|plotshape(data = default, style=shapexcross)|E|";
                string badmixko = "|B|plotshape(data = default, t, y=20)|E|";

                // var r = parser.Parse(ok1);
                // r = parser.Parse(ok2);
                // r = parser.Parse(kw);
                var r        = parser.Parse("a, b, c=100, d= 200", "fun_actual_args");
                var graphviz = new GraphVizEBNFSyntaxTreeVisitor <ScriptToken>();
                var root1    = graphviz.VisitTree(r.SyntaxTree);
                var graph1   = graphviz.Graph.Compile();

                r        = parser.Parse(ko1);
                graphviz = new GraphVizEBNFSyntaxTreeVisitor <ScriptToken>();
                var root  = graphviz.VisitTree(r.SyntaxTree);
                var graph = graphviz.Graph.Compile();
                r        = parser.Parse(ko3);
                graphviz = new GraphVizEBNFSyntaxTreeVisitor <ScriptToken>();
                root     = graphviz.VisitTree(r.SyntaxTree);
                graph    = graphviz.Graph.Compile();
                r        = parser.Parse(badmixko);
                graphviz = new GraphVizEBNFSyntaxTreeVisitor <ScriptToken>();
                root     = graphviz.VisitTree(r.SyntaxTree);
                graph    = graphviz.Graph.Compile();
            }
            else
            {
                foreach (var e in parserBuild.Errors)
                {
                    Console.WriteLine(e.Level + " - " + e.Message);
                }
            }
        }