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