Пример #1
0
        private void btnTranslate_Click(object sender, EventArgs e)
        {
            try
            {
                this.Cursor = Cursors.WaitCursor;

                btnTranslate.Enabled = false;
                var  translator = new AbnfToAntlrTranslator();
                bool performDirectTranslation = false;

                if (chkPerformDirectTranslation.Checked == true)
                {
                    performDirectTranslation = true;
                }

                var input = txtInput.Text;
                if (input.EndsWith("\r\n"))
                {
                    // do nothing
                }
                else
                {
                    input = input + "\r\n";
                }

                this.txtOutput.Text      = translator.Translate(input, performDirectTranslation);
                this.txtOutput.ForeColor = this.ForeColor;
                this.txtOutput.BackColor = this.BackColor; // readonly textbox forecolor only changes when backcolor is set
            }
            catch (TranslationException ex)
            {
                this.txtOutput.Text      = AntlrHelper.GetErrorMessages(ex.ParserRecognitionExceptions) + AntlrHelper.GetErrorMessages(ex.LexerRecognitionExceptions);
                this.txtOutput.ForeColor = Color.DarkRed;
                this.txtOutput.BackColor = this.BackColor; // readonly textbox forecolor only changes when backcolor is set
            }
            catch (RecognitionException ex)
            {
                this.txtOutput.Text      = AntlrHelper.GetErrorMessage(ex);
                this.txtOutput.ForeColor = Color.DarkRed;
                this.txtOutput.BackColor = this.BackColor; // readonly textbox forecolor only changes when backcolor is set
            }
            catch (Exception ex)
            {
                this.txtOutput.Text      = ex.Message;
                this.txtOutput.ForeColor = Color.DarkRed;
                this.txtOutput.BackColor = this.BackColor; // readonly textbox forecolor only changes when backcolor is set
            }
            finally
            {
                this.Cursor          = Cursors.Default;
                btnTranslate.Enabled = true;
                lblOutput.Visible    = true;
                txtOutput.Visible    = true;
            }
        }
Пример #2
0
        internal void UpdateMatchings()
        {
            sourceCodeLogger.Clear();

            var sourceCodeRep = new MemoryCodeRepository(sourceCodeTextBox.Text);
            IPatternsRepository patternRepository;

            if (!string.IsNullOrEmpty(ServiceLocator.PatternViewModel.Value))
            {
                patternRepository = new DslPatternRepository(ServiceLocator.PatternViewModel.Value, ServiceLocator.PatternViewModel.Languages);
            }
            else
            {
                patternRepository = new MemoryPatternsRepository();
            }
            var workflow = new Workflow(sourceCodeRep, SelectedLanguage, patternRepository, stage: Stage);

            workflow.IsIncludeIntermediateResult = true;
            workflow.Logger = sourceCodeLogger;
            WorkflowResult workflowResult = workflow.Process();

            MatchingResultDto[] matchingResults = workflowResult.MatchingResults
                                                  .ToDto(workflow.SourceCodeRepository)
                                                  .ToArray();

            if (IsDeveloperMode)
            {
                AntlrParseTree antlrParseTree = workflowResult.ParseTrees.FirstOrDefault() as AntlrParseTree;
                if (antlrParseTree != null && antlrParseTree.SyntaxTree != null)
                {
                    Antlr4.Runtime.Parser antlrParser = (workflow.ParserConverterSets[antlrParseTree.SourceLanguage].Parser as AntlrParser).Parser;
                    string tokensString = AntlrHelper.GetTokensString(antlrParseTree.Tokens, antlrParser.Vocabulary, onlyDefaultChannel: true);
                    string treeString   = antlrParseTree.SyntaxTree.ToStringTreeIndented(antlrParser);

                    Tokens    = tokensString;
                    ParseTree = treeString;
                    File.WriteAllText(Path.Combine(ServiceLocator.TempDirectory, "Tokens.txt"), Tokens);
                    File.WriteAllText(Path.Combine(ServiceLocator.TempDirectory, "Tree.txt"), ParseTree);
                }
                if (Stage >= Stage.Convert && workflowResult.Usts.FirstOrDefault() != null)
                {
                    UstJson = jsonSerializer.Serialize(workflowResult.Usts.FirstOrDefault().Root);
                    File.WriteAllText(Path.Combine(ServiceLocator.TempDirectory, "UST.json"), UstJson);
                }
            }

            MatchingResultText = "MATCHINGS";
            if (matchingResults.Count() > 0)
            {
                MatchingResultText += " (" + matchingResults.Count() + ")";
            }

            if (sourceCodeLogger.ErrorCount == 0)
            {
                SourceCodeErrorsIsVisible = false;
                SourceCodeErrorsText      = "ERRORS";
            }
            else
            {
                SourceCodeErrorsIsVisible = true;
                SourceCodeErrorsText      = $"ERRORS ({sourceCodeLogger.ErrorCount})";
            }

            Dispatcher.UIThread.InvokeAsync(() =>
            {
                MatchingResults.Clear();
                foreach (var matchingResult in matchingResults)
                {
                    MatchingResults.Add(new MathingResultDtoWrapper(matchingResult));
                }
                this.RaisePropertyChanged(nameof(Tokens));
                this.RaisePropertyChanged(nameof(ParseTree));
                this.RaisePropertyChanged(nameof(UstJson));
                this.RaisePropertyChanged(nameof(MatchingResultText));
                this.RaisePropertyChanged(nameof(SourceCodeErrorsIsVisible));
                this.RaisePropertyChanged(nameof(SourceCodeErrorsText));
            });
        }