protected AstNode GetAstNodesFromInput(string input) { var charStream = new AntlrInputStream(input); var lexer = new QlLexer(charStream); var parser = new QlParser(new CommonTokenStream(lexer)); var visitor = new AstCreator(); return(visitor.Visit(parser.form())); }
/// <summary> /// Rule: Start -> (Program)? EOF ; /// </summary> protected override object EvalStart(ParseTree tree, params object[] paramlist) { Namespaces.Reset(); AstCreator.Reset(); var program = GetNode(TokenType.Program); program?.Eval(tree); return(null); }
public FormStatement BuildAst() { var dataStream = new AntlrInputStream(this.InputData); var lexer = new QlLexer(dataStream); var parser = new QlParser(new CommonTokenStream(lexer)); var astCreator = new AstCreator(); var astTree = astCreator.Visit(parser.form()); Console.WriteLine("Ql AST building done!"); return(astTree.As <FormStatement>()); }
public StyleSheet BuildAst() { var dataStream = new AntlrInputStream(this.InputData); var lexer = new QlsGrammarLexer(dataStream); var parser = new QlsGrammarParser(new CommonTokenStream(lexer)); var visitor = new AstCreator(); var astTree = visitor.Visit(parser.stylesheet()); Console.WriteLine("Ql AST building done!"); return(astTree.As <StyleSheet>()); }
public SourceCodeHandler(string source, bool generateAssembly) { var scanner = new Scanner(); var parser = new Parser(scanner); //var highlighter = new TextHighlighter(source, scanner, parser); var tree = parser.Parse(source, "", new AstGenerationTree()); PopulateSyntaxTree(tree.Nodes.First(), ParseTree); PopulateTokens(scanner); if (!tree.Errors.Any()) { try { tree.Eval(); var r = Namespaces.Root; var p = AstCreator.GetProgram(); p.Optimize(); ASTTree = p.GetNodes(); //new ControlFlowVisitor().Visit(p); PopulateIdentifierTree(Namespaces.Root, IdentifierTree); if (generateAssembly) { var codeGeneration = new CodeGenVisitor(p); try { codeGeneration.GenerateAssembly($"{AppDomain.CurrentDomain.BaseDirectory}\\output.exe"); } catch (Exception exception) { tree.Errors.Add(new ParseError($"Что-то пошло не так {exception.Message}", 0)); } } } catch (ParseException parseException) { tree.Errors.Add(parseException.Error); } } Errors = tree.Errors; Status = $"Errors: {string.Join(Environment.NewLine, tree.Errors.Select(e => e.ToString()))}{Environment.NewLine}"; }