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); }
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; }
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()); }
internal ParseRuleBranch(ParseBranch <TToken> branch, ParseEnvironment ruleEnvironment = null, bool skip = true) { _branch = branch; _ruleEnvironment = ruleEnvironment; _skip = skip; }