Exemple #1
0
        public ParseBranch <TToken> Sequence(string sequenceName, [CallerMemberName] string branchName = null)
        {
            var result = new ParseBranch <TToken>(this, Environment.Clone(), branchName, sequenceName);

            _sequenceChecks.Add(result);
            return(result);
        }
Exemple #2
0
 internal ParseTokenBranch(ParseBranch <TToken> branch, TToken aheadToken = default(TToken), bool skip = true)
 {
     if (branch == null)
     {
         throw new ArgumentNullException(nameof(branch));
     }
     _branch     = branch;
     _aheadToken = aheadToken;
     _skip       = skip;
 }
Exemple #3
0
        private string GenerateDGraph(ParseBranch <TToken> branch, Guid id)
        {
            if (branch == null)
            {
                throw new InvalidOperationException();
            }
            var builder = new StringBuilder();

            builder.AppendLine($"{GenerateDGraphVertexId(id)} [color=chartreuse1] [label=\"{branch.BranchName}\"]");

            foreach (var assert in branch.Asserts.Enumerate().Reverse())
            {
                var branchAssertResult = assert as AssertResultBranch <TToken>;
                if (branchAssertResult != null)
                {
                    var label = branchAssertResult.Label ?? branchAssertResult.Branch.BranchName;
                    builder.AppendLine($"{GenerateDGraphVertexId(assert.Id)} [color=orange] " +
                                       $"[label=\"{label}\"]");
                    builder.AppendLine($"{GenerateDGraphVertexId(id)} -> {GenerateDGraphVertexId(assert.Id)}");
                    builder.Append(GenerateDGraph(branchAssertResult.Branch, assert.Id));
                }

                var tokenAssertResult = assert as AssertResultToken <TToken>;
                if (tokenAssertResult != null)
                {
                    var color   = "darkslategray1";
                    var label   = tokenAssertResult.Label ?? tokenAssertResult.Token.ToString().Replace("\"", string.Empty);
                    var tooltip = string.Empty;
                    if (assert.Error != null)
                    {
                        color   = "red";
                        tooltip = assert.Error.Message;
                    }
                    builder.AppendLine($"{GenerateDGraphVertexId(assert.Id)} [color={color}]" +
                                       $"[label=\"{label}\"]" +
                                       $"[tooltip=\"{tooltip}\"]");
                    builder.AppendLine($"{GenerateDGraphVertexId(id)} -> {GenerateDGraphVertexId(assert.Id)}");
                }

                //var tokenAssertEmpty = assert as AssertResultEmpty;
                //if (tokenAssertEmpty != null)
                //{
                //    var label = tokenAssertEmpty.Label ?? "Empty";
                //    builder.AppendLine($"{GenerateDGraphVertexId(assert.Id)} [label=\"{label}\"]");
                //    builder.AppendLine($"{GenerateDGraphVertexId(id)} -> {GenerateDGraphVertexId(assert.Id)}");
                //}
            }

            builder.AppendLine($"subgraph cluster_{GenerateDGraphVertexId(Guid.NewGuid())} {{");
            builder.AppendLine($"label = \"{branch.AssertName}\"");
            foreach (var assert in branch.Asserts)
            {
                if (assert is AssertResultEmpty)
                {
                    continue;
                }
                builder.AppendLine($"{GenerateDGraphVertexId(assert.Id)}");
            }
            builder.AppendLine("}");

            return(builder.ToString());
        }
Exemple #4
0
 internal ParseRuleBranch(ParseBranch <TToken> branch, ParseEnvironment ruleEnvironment = null, bool skip = true)
 {
     _branch          = branch;
     _ruleEnvironment = ruleEnvironment;
     _skip            = skip;
 }