示例#1
0
        private void CreateDiagramBtn_Click(object sender, RoutedEventArgs e)
        {
            var starter = new DiagramCreator(_chosenLang);

            try
            {
                var filePathToSave     = searchSaveFilderTextBox.Text;
                var codeToBuildDiagram = codeContentTextBox.Text;
                var creationProps      = new DiagramCreateProps(codeToBuildDiagram, filePathToSave,
                                                                closeAfterBuildCheckBox.IsChecked != null && (bool)closeAfterBuildCheckBox.IsChecked);
                var finalDiagramFilePath = starter.CreateDiagram(creationProps);
                ShowInfoMessage("Диаграмма сохранена!", $"Путь до диаграммы - {finalDiagramFilePath}");
            }
            catch (LexException exception)
            {
                var logFilepath = ExceptionLogger.LogException(exception, codeContentTextBox.Text);
                ShowDiagramCreateErrorMessage(logFilepath, $"Не удалось распознать токен - '{exception.ErrorToken}'" +
                                              $"\nНомер строки, в кторой возникла ошибка - {exception.ErrorLineNumber}");
            }
            catch (ParseException exception)
            {
                var logFilepath = ExceptionLogger.LogParseException(exception, codeContentTextBox.Text);
                ShowDiagramCreateErrorMessage(logFilepath, $"Ошибка парсинга для узла {exception.ParsedNodeType}!" +
                                              $"\nНомер строки, в кторой возникла ошибка - {exception.ErrorLineNumber}");
            }
            catch (Exception exception)
            {
                var logFilepath = ExceptionLogger.LogException(exception, codeContentTextBox.Text);
                ShowDiagramCreateErrorMessage(logFilepath);
            }
        }
示例#2
0
        public string CreateDiagram(DiagramCreateProps diagramCreateProps)
        {
            var code   = Language.CleanCodeBeforeParse(diagramCreateProps.Code);
            var tokens = Language.TokenizeCode(code);

            tokens = Language.FilterTokens(tokens);
            var codeAst = Language.ParseTokens(tokens);

            codeAst = Language.ApplyNodeTextRules(codeAst);
            codeAst = Language.OptimizeMethodsStructure(codeAst);
            var diagramFilename = DiagramBuilder.BuildDiagram(codeAst, diagramCreateProps.CloseDiagramAfterBuild,
                                                              diagramCreateProps.DiagramPath);

            return(diagramFilename);
        }