/// <summary> /// 启动编译 /// </summary> private async void RunAsync() { StateSBI.Content = "编译中..."; if (parserAdapter == null) { parserAdapter = new ParserAdapter(); } var result = await parserAdapter.Compile(CodeBox.Text, Path.RULE_PATH, Path.CFG_PATH); FirstTableDataGrid.ItemsSource = result.First; FollowTableDataGrid.ItemsSource = result.Follow; ASTView.ItemsSource = new List <Node>() { result.Root }; ArithResultDataGrid.ItemsSource = result.ArithResult; ErrorDataGrid.ItemsSource = result.Errors; CodeBox.popup.ClearTokens(); foreach (var id in result.IDs) { int index = CodeBox.popup.tokens.BinarySearch(id); if (index < 0) { CodeBox.popup.tokens.Insert(~index, id); } } CodeBox.popup.RefreshList(); var pairDecoration = new CodeBoxControl.Decorations.PairDecoration() { DecorationType = CodeBoxControl.Decorations.EDecorationType.Underline, Brush = new SolidColorBrush(Color.FromArgb(255, 255, 0, 0)), }; foreach (var error in result.Errors) { int offset = CodeBox.GetCharacterIndexFromLineIndex(error.Row - 1) + error.Col - 1; pairDecoration.Pairs.Add(new CodeBoxControl.Pair(offset, error.WordLength)); } CodeBox.Decorations.Clear(); CodeBox.Decorations.Add(pairDecoration); CodeBox.InvalidateVisual(); StateSBI.Content = "就绪"; }