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