Example #1
0
        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()));
        }
Example #2
0
        /// <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);
        }
Example #3
0
        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>());
        }
Example #4
0
        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}";
        }