Ejemplo n.º 1
0
        public void HandleRun(object sender, EventArgs e)
        {
            Stopwatch sw = new Stopwatch();

            sw.Start();

            Simula.Scripting.Parser.Tokenizer tokenizer = new Scripting.Parser.Tokenizer();
            var tokenCollection = tokenizer.Tokenize(editor.Text);

            Simula.Scripting.Parser.Parser parser = new Scripting.Parser.Parser();
            var program    = parser.Parse(tokenCollection);
            var syntaxTree = Simula.Scripting.Analysis.SyntaxTree.Analyse(0, program);

            Simula.Scripting.Analysis.AnalysisEnvironment environment = new Scripting.Analysis.AnalysisEnvironment();
            var programBuilder = environment.Load(syntaxTree, "autogen");

            sw.Stop();
            System.Windows.MessageBox.Show("编译用时 " + sw.ElapsedMilliseconds + " ms");

            // entry point is the static method 'void program.statics.___entry()'

            var assembly = programBuilder.Assembly;
            var statics  = assembly.GetType("program.statics");
            var entry    = statics.GetMethod("___entry");

            entry.Invoke(null, null);
        }
Ejemplo n.º 2
0
        public SyntaxMargin()
        {
            this.timer.Tick += (sender, e) =>
            {
                if (this.Document == null)
                {
                    return;
                }

                try {
                    Simula.Scripting.Parser.Tokenizer tokenizer = new Scripting.Parser.Tokenizer();
                    var tokenCollection = tokenizer.Tokenize(this.Document.Text);
                    Simula.Scripting.Parser.Parser parser = new Scripting.Parser.Parser();
                    var program = parser.Parse(tokenCollection);

                    if (this.manager == null)
                    {
                        this.manager = new BookMarkManager();
                    }
                    this.manager.Bookmarks.Clear();

                    foreach (var item in program.Body)
                    {
                        VisitSyntaxTree(item);
                    }
                } catch { }
            };

            timer.Interval = TimeSpan.FromMilliseconds(500);
            timer.Start();
        }