Esempio n. 1
0
        /// <summary>
        /// Compiles the specified code
        /// </summary>
        /// <param name="code">MuteScript code to compile</param>
        /// <returns>Returns a <see cref="CompilationResult" /></returns>
        public CompilationResult Compile(string code)
        {
            var lexer  = new MuteGrammarLexer(new AntlrInputStream(code));
            var parser = new MuteGrammarParser(new BufferedTokenStream(lexer));

            var errorListener = new TokenErrorListener {
                Messages = parser.Messages
            };

            parser.RemoveErrorListeners();
            parser.AddErrorListener(errorListener);
            parser.NamespaceLookup = this.NamespaceLookup;
            parser.UsingTypes      = this.ImplicitImports;

            var ctx = parser.compileUnit();

            if (parser.Messages.Count(x => x.Severity == MessageSeverity.Error) > 0)
            {
                return(new CompilationResult(null, parser.Messages));
            }

            var cmp    = new ExpressionCompiler();
            var result = cmp.Compile(ctx.module);

            return(new CompilationResult(result, parser.Messages));
        }