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); } } }
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); }
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(); }
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); }
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); } } }