302 references to SymbolicRegexNodeKind
System.Text.RegularExpressions (302)
System\Text\RegularExpressions\Symbolic\MatchingState.cs (1)
147if (Node.Kind != SymbolicRegexNodeKind.DisableBacktrackingSimulation)
System\Text\RegularExpressions\Symbolic\SymbolicRegexBuilder.cs (29)
28internal SymbolicRegexNode<TSet> BeginningAnchor => field ??= SymbolicRegexNode<TSet>.CreateAnchor(this, SymbolicRegexNodeKind.BeginningAnchor); 29internal SymbolicRegexNode<TSet> EndAnchor => field ??= SymbolicRegexNode<TSet>.CreateAnchor(this, SymbolicRegexNodeKind.EndAnchor); 30internal SymbolicRegexNode<TSet> EndAnchorZ => field ??= SymbolicRegexNode<TSet>.CreateAnchor(this, SymbolicRegexNodeKind.EndAnchorZ); 31internal SymbolicRegexNode<TSet> EndAnchorZReverse => field ??= SymbolicRegexNode<TSet>.CreateAnchor(this, SymbolicRegexNodeKind.EndAnchorZReverse); 32internal SymbolicRegexNode<TSet> BolAnchor => field ??= SymbolicRegexNode<TSet>.CreateAnchor(this, SymbolicRegexNodeKind.BOLAnchor); 33internal SymbolicRegexNode<TSet> EolAnchor => field ??= SymbolicRegexNode<TSet>.CreateAnchor(this, SymbolicRegexNodeKind.EOLAnchor); 34internal SymbolicRegexNode<TSet> BoundaryAnchor => field ??= SymbolicRegexNode<TSet>.CreateAnchor(this, SymbolicRegexNodeKind.BoundaryAnchor); 35internal SymbolicRegexNode<TSet> NonBoundaryAnchor => field ??= SymbolicRegexNode<TSet>.CreateAnchor(this, SymbolicRegexNodeKind.NonBoundaryAnchor); 55SymbolicRegexNodeKind kind, SymbolicRegexNode<TSet>? left, SymbolicRegexNode<TSet>? right, 59public readonly SymbolicRegexNodeKind Kind = kind; 223if (!isLazy && lower == 0 && upper == int.MaxValue && node._kind == SymbolicRegexNodeKind.Singleton) 233if (node.Kind == SymbolicRegexNodeKind.Loop && node._lower == 0 && node._upper == 1 && lower == 0 && upper == 1) 284case SymbolicRegexNodeKind.BeginningAnchor: 287case SymbolicRegexNodeKind.EndAnchor: 290case SymbolicRegexNodeKind.EndAnchorZ: 293case SymbolicRegexNodeKind.EndAnchorZReverse: 296case SymbolicRegexNodeKind.BOLAnchor: 299case SymbolicRegexNodeKind.EOLAnchor: 302case SymbolicRegexNodeKind.BoundaryAnchor: 305case SymbolicRegexNodeKind.NonBoundaryAnchor: 308case SymbolicRegexNodeKind.FixedLengthMarker: 311case SymbolicRegexNodeKind.Epsilon: 314case SymbolicRegexNodeKind.Singleton: 318case SymbolicRegexNodeKind.Loop: 322case SymbolicRegexNodeKind.Alternate: 329case SymbolicRegexNodeKind.CaptureStart: 332case SymbolicRegexNodeKind.CaptureEnd: 335case SymbolicRegexNodeKind.Concat: 346case SymbolicRegexNodeKind.DisableBacktrackingSimulation:
System\Text\RegularExpressions\Symbolic\SymbolicRegexMatcher.Automata.cs (9)
196if (node._kind is not SymbolicRegexNodeKind.Concat) 198if (node._kind is SymbolicRegexNodeKind.CaptureStart) 208if (left._kind is SymbolicRegexNodeKind.CaptureEnd or SymbolicRegexNodeKind.BoundaryAnchor or SymbolicRegexNodeKind.Singleton) 211if (left._kind is SymbolicRegexNodeKind.Singleton) 216else if (left._kind is SymbolicRegexNodeKind.Loop) 218if (left._lower <= 0 || left._left!.Kind is not SymbolicRegexNodeKind.Singleton) 296Debug.Assert(node.Kind != SymbolicRegexNodeKind.Alternate);
System\Text\RegularExpressions\Symbolic\SymbolicRegexNode.cs (263)
35internal readonly SymbolicRegexNodeKind _kind; 62private SymbolicRegexNode(SymbolicRegexBuilder<TSet> builder, SymbolicRegexNodeKind kind, SymbolicRegexNode<TSet>? left, SymbolicRegexNode<TSet>? right, int lower, int upper, TSet set, SymbolicRegexInfo info) 78private static SymbolicRegexNode<TSet> Create(SymbolicRegexBuilder<TSet> builder, SymbolicRegexNodeKind kind, SymbolicRegexNode<TSet>? left, SymbolicRegexNode<TSet>? right, int lower, int upper, TSet? set, SymbolicRegexInfo info) 80Debug.Assert(kind != SymbolicRegexNodeKind.Singleton || set is not null); 81TSet setOrStartSet = kind == SymbolicRegexNodeKind.Singleton ? set! : ComputeStartSet(builder, kind, left, right); 123case SymbolicRegexNodeKind.Loop: 127case SymbolicRegexNodeKind.Concat: 138case SymbolicRegexNodeKind.DisableBacktrackingSimulation: 139case SymbolicRegexNodeKind.Effect: 140case SymbolicRegexNodeKind.Alternate: 153Debug.Assert(node._kind is SymbolicRegexNodeKind.BeginningAnchor or 154SymbolicRegexNodeKind.EndAnchor or 155SymbolicRegexNodeKind.BOLAnchor or 156SymbolicRegexNodeKind.EOLAnchor or 157SymbolicRegexNodeKind.BoundaryAnchor or 158SymbolicRegexNodeKind.NonBoundaryAnchor or 159SymbolicRegexNodeKind.EndAnchorZ or 160SymbolicRegexNodeKind.EndAnchorZReverse); 185public List<SymbolicRegexNode<TSet>> ToList(List<SymbolicRegexNode<TSet>>? list = null, SymbolicRegexNodeKind listKind = SymbolicRegexNodeKind.Concat) 187Debug.Assert(listKind is SymbolicRegexNodeKind.Concat or SymbolicRegexNodeKind.Alternate); 192static void AppendToList(SymbolicRegexNode<TSet> concat, List<SymbolicRegexNode<TSet>> list, SymbolicRegexNodeKind listKind) 257case SymbolicRegexNodeKind.Loop: 262case SymbolicRegexNodeKind.Concat: 267case SymbolicRegexNodeKind.Alternate: 272case SymbolicRegexNodeKind.BeginningAnchor: 276case SymbolicRegexNodeKind.EndAnchor: 280case SymbolicRegexNodeKind.BOLAnchor: 286case SymbolicRegexNodeKind.EOLAnchor: 292case SymbolicRegexNodeKind.BoundaryAnchor: 297case SymbolicRegexNodeKind.NonBoundaryAnchor: 302case SymbolicRegexNodeKind.EndAnchorZ: 308case SymbolicRegexNodeKind.CaptureStart: 309case SymbolicRegexNodeKind.CaptureEnd: 313case SymbolicRegexNodeKind.DisableBacktrackingSimulation: 314case SymbolicRegexNodeKind.Effect: 323Debug.Assert(_kind == SymbolicRegexNodeKind.EndAnchorZReverse); 340if (_left._kind == SymbolicRegexNodeKind.Singleton) 353if (_kind == SymbolicRegexNodeKind.Singleton) 366public bool IsEpsilon => _kind == SymbolicRegexNodeKind.Epsilon; 369internal SymbolicRegexNodeKind Kind => _kind; 379Create(builder, SymbolicRegexNodeKind.Singleton, null, null, -1, -1, builder._solver.Empty, default); 382Create(builder, SymbolicRegexNodeKind.Singleton, null, null, -1, -1, builder._solver.Full, default); 385Create(builder, SymbolicRegexNodeKind.FixedLengthMarker, null, null, length, -1, default, SymbolicRegexInfo.Epsilon()); 388Create(builder, SymbolicRegexNodeKind.Epsilon, null, null, -1, -1, default, SymbolicRegexInfo.Epsilon()); 390internal static SymbolicRegexNode<TSet> CreateAnchor(SymbolicRegexBuilder<TSet> builder, SymbolicRegexNodeKind kind) 393SymbolicRegexNodeKind.BoundaryAnchor or SymbolicRegexNodeKind.NonBoundaryAnchor or 394SymbolicRegexNodeKind.BeginningAnchor or SymbolicRegexNodeKind.EndAnchor or 395SymbolicRegexNodeKind.EndAnchorZ or SymbolicRegexNodeKind.EndAnchorZReverse or 396SymbolicRegexNodeKind.EOLAnchor or SymbolicRegexNodeKind.BOLAnchor); 400isLineAnchor: kind is SymbolicRegexNodeKind.EndAnchorZ or SymbolicRegexNodeKind.EndAnchorZReverse or SymbolicRegexNodeKind.EOLAnchor or SymbolicRegexNodeKind.BOLAnchor, 401isEndZAnchor: kind is SymbolicRegexNodeKind.EndAnchorZ)); 407Create(builder, SymbolicRegexNodeKind.Singleton, null, null, -1, -1, set, default); 414if (lower == 0 && upper == 1 && body._kind == SymbolicRegexNodeKind.Loop && body._lower == 0 && body._upper == 1) 419return Create(builder, SymbolicRegexNodeKind.Loop, body, null, lower, upper, default, SymbolicRegexInfo.Loop(body._info, lower, isLazy)); 430if (node._kind == SymbolicRegexNodeKind.Effect) 436return Create(builder, SymbolicRegexNodeKind.Effect, node, effectNode, -1, -1, default, SymbolicRegexInfo.Effect(node._info)); 440Create(builder, SymbolicRegexNodeKind.CaptureStart, null, null, captureNum, -1, default, SymbolicRegexInfo.Epsilon()); 443Create(builder, SymbolicRegexNodeKind.CaptureEnd, null, null, captureNum, -1, default, SymbolicRegexInfo.Epsilon()); 446Create(builder, SymbolicRegexNodeKind.DisableBacktrackingSimulation, child, null, -1, -1, default, child._info); 462Debug.Assert(right._kind is not SymbolicRegexNodeKind.Effect); 463if (left._kind == SymbolicRegexNodeKind.Effect) 469return Create(builder, SymbolicRegexNodeKind.Concat, left, right, -1, -1, default, SymbolicRegexInfo.Concat(left._info, right._info)); 497SymbolicRegexNode<TSet> head = right._kind == SymbolicRegexNodeKind.Alternate ? right._left! : right; 498SymbolicRegexNode<TSet> tail = right._kind == SymbolicRegexNodeKind.Alternate ? right._right! : builder._nothing; 514if (!deduplicated && left._kind != SymbolicRegexNodeKind.Alternate) 519while (current._kind == SymbolicRegexNodeKind.Alternate) 523Debug.Assert(current._left._kind != SymbolicRegexNodeKind.Alternate); 537if (!deduplicated || left._kind == SymbolicRegexNodeKind.Alternate) 540List<SymbolicRegexNode<TSet>> elems = left.ToList(listKind: SymbolicRegexNodeKind.Alternate); 542right.ToList(elems, listKind: SymbolicRegexNodeKind.Alternate); 583Debug.Assert(left._kind != SymbolicRegexNodeKind.Alternate); 586return Create(builder, SymbolicRegexNodeKind.Alternate, left, right, -1, -1, default, SymbolicRegexInfo.Alternate(left._info, right._info)); 651if (left._kind == SymbolicRegexNodeKind.Effect) 659if (right._kind == SymbolicRegexNodeKind.Effect) 667if (left._kind == SymbolicRegexNodeKind.Concat && right._kind == SymbolicRegexNodeKind.Concat) 671if (left._left.IsNullable && rl._kind == SymbolicRegexNodeKind.Loop && rl._lower == 0 && rl._upper == 1 && rl.IsLazy) 681if (left._kind == SymbolicRegexNodeKind.Concat && right._kind == SymbolicRegexNodeKind.Concat) 685if (ll._kind == SymbolicRegexNodeKind.Loop && ll._lower == 0 && ll._upper == 1 && ll.IsLazy) 694if (left._kind == SymbolicRegexNodeKind.Concat) 713while (prefix._kind == SymbolicRegexNodeKind.Concat) 716if (node._kind != SymbolicRegexNodeKind.Concat) 728if (node._kind != SymbolicRegexNodeKind.Concat) 750while (current._kind == SymbolicRegexNodeKind.Effect) 789if (left._kind == SymbolicRegexNodeKind.Effect) 812if (right._kind == SymbolicRegexNodeKind.Effect) 821if (right._kind == SymbolicRegexNodeKind.Concat) 842while (suffix._kind == SymbolicRegexNodeKind.Concat) 892case SymbolicRegexNodeKind.FixedLengthMarker: 893case SymbolicRegexNodeKind.Epsilon: 894case SymbolicRegexNodeKind.BOLAnchor: 895case SymbolicRegexNodeKind.EOLAnchor: 896case SymbolicRegexNodeKind.EndAnchor: 897case SymbolicRegexNodeKind.BeginningAnchor: 898case SymbolicRegexNodeKind.EndAnchorZ: 899case SymbolicRegexNodeKind.EndAnchorZReverse: 900case SymbolicRegexNodeKind.BoundaryAnchor: 901case SymbolicRegexNodeKind.NonBoundaryAnchor: 902case SymbolicRegexNodeKind.CaptureStart: 903case SymbolicRegexNodeKind.CaptureEnd: 906case SymbolicRegexNodeKind.Singleton: 909case SymbolicRegexNodeKind.Loop: 927case SymbolicRegexNodeKind.Concat: 946case SymbolicRegexNodeKind.Alternate: 960case SymbolicRegexNodeKind.DisableBacktrackingSimulation: 961case SymbolicRegexNodeKind.Effect: 970/// Insert <see cref="SymbolicRegexNodeKind.FixedLengthMarker"/> nodes to mark paths in the regex that correspond 989case SymbolicRegexNodeKind.Alternate: 996case SymbolicRegexNodeKind.Concat: 1012case SymbolicRegexNodeKind.FixedLengthMarker: 1066if (_kind == SymbolicRegexNodeKind.DisableBacktrackingSimulation) 1102case SymbolicRegexNodeKind.Alternate: 1113case SymbolicRegexNodeKind.Concat: 1119SymbolicRegexNodeKind.Concat => CreateConcat(builder, _left._left!, CreateConcat(builder, _left._right!, _right)) 1126SymbolicRegexNodeKind.Alternate => (_left._left!.IsNullableFor(context) ? 1131SymbolicRegexNodeKind.Loop => PruneLoop(builder, context, _left, _right), 1138case SymbolicRegexNodeKind.Loop: 1143case SymbolicRegexNodeKind.Effect: 1160Debug.Assert(loop.Kind == SymbolicRegexNodeKind.Loop && loop._left is not null); 1214Debug.Assert(_kind == SymbolicRegexNodeKind.Loop && _left is not null); 1236/// -Some nodes, namely <see cref="SymbolicRegexNodeKind.CaptureStart"/> and <see cref="SymbolicRegexNodeKind.CaptureEnd"/>, 1237/// will produce <see cref="SymbolicRegexNodeKind.Effect"/> nodes, which indicate effects to be applied on 1265case SymbolicRegexNodeKind.Singleton: 1283case SymbolicRegexNodeKind.Concat: 1315case SymbolicRegexNodeKind.Loop: 1336case SymbolicRegexNodeKind.Alternate: 1343case SymbolicRegexNodeKind.Effect: 1387case SymbolicRegexNodeKind.Effect: 1393case SymbolicRegexNodeKind.Concat: 1399case SymbolicRegexNodeKind.Alternate: 1408List<SymbolicRegexNode<TSet>> elems = strippedLeft.ToList(listKind: SymbolicRegexNodeKind.Alternate); 1409strippedRight.ToList(elems, listKind: SymbolicRegexNodeKind.Alternate); 1414case SymbolicRegexNodeKind.DisableBacktrackingSimulation: 1419case SymbolicRegexNodeKind.Loop: 1434/// This function maps <see cref="SymbolicRegexNodeKind.Effect"/> nodes present in the tree and maps them into 1472case SymbolicRegexNodeKind.Effect: 1483case SymbolicRegexNodeKind.Concat: 1499case SymbolicRegexNodeKind.Alternate: 1505case SymbolicRegexNodeKind.Loop when _lower == 0 && _upper == 1: 1524case SymbolicRegexNodeKind.DisableBacktrackingSimulation: 1563case SymbolicRegexNodeKind.Concat: 1570case SymbolicRegexNodeKind.Loop: 1580case SymbolicRegexNodeKind.Alternate: 1595case SymbolicRegexNodeKind.CaptureStart: 1599case SymbolicRegexNodeKind.CaptureEnd: 1603case SymbolicRegexNodeKind.DisableBacktrackingSimulation: 1629case SymbolicRegexNodeKind.EndAnchor: 1633case SymbolicRegexNodeKind.BeginningAnchor: 1637case SymbolicRegexNodeKind.BOLAnchor: 1641case SymbolicRegexNodeKind.EOLAnchor: 1645case SymbolicRegexNodeKind.Epsilon: 1649case SymbolicRegexNodeKind.FixedLengthMarker: 1654case SymbolicRegexNodeKind.BoundaryAnchor: 1658case SymbolicRegexNodeKind.NonBoundaryAnchor: 1662case SymbolicRegexNodeKind.EndAnchorZ: 1666case SymbolicRegexNodeKind.EndAnchorZReverse: 1670case SymbolicRegexNodeKind.Alternate: 1679case SymbolicRegexNodeKind.Concat: 1682if (_left.Kind == SymbolicRegexNodeKind.Concat) 1685if (_left.Kind == SymbolicRegexNodeKind.Concat) 1690case SymbolicRegexNodeKind.Singleton: 1695case SymbolicRegexNodeKind.Loop: 1754case SymbolicRegexNodeKind.Effect: 1766case SymbolicRegexNodeKind.CaptureStart: 1773case SymbolicRegexNodeKind.CaptureEnd: 1780case SymbolicRegexNodeKind.DisableBacktrackingSimulation: 1794case SymbolicRegexNodeKind.Singleton: 1860case SymbolicRegexNodeKind.BOLAnchor: 1861case SymbolicRegexNodeKind.EOLAnchor: 1862case SymbolicRegexNodeKind.EndAnchorZ: 1863case SymbolicRegexNodeKind.EndAnchorZReverse: 1867case SymbolicRegexNodeKind.BeginningAnchor: 1868case SymbolicRegexNodeKind.EndAnchor: 1869case SymbolicRegexNodeKind.Epsilon: 1870case SymbolicRegexNodeKind.FixedLengthMarker: 1871case SymbolicRegexNodeKind.CaptureStart: 1872case SymbolicRegexNodeKind.CaptureEnd: 1875case SymbolicRegexNodeKind.Singleton: 1880case SymbolicRegexNodeKind.Loop: 1885case SymbolicRegexNodeKind.Alternate: 1891case SymbolicRegexNodeKind.Concat: 1894while (conc._kind == SymbolicRegexNodeKind.Concat) 1903case SymbolicRegexNodeKind.DisableBacktrackingSimulation: 1908case SymbolicRegexNodeKind.NonBoundaryAnchor: 1909case SymbolicRegexNodeKind.BoundaryAnchor: 1935case SymbolicRegexNodeKind.Loop: 1939case SymbolicRegexNodeKind.Concat: 1944while (rest._kind == SymbolicRegexNodeKind.Concat) 1956case SymbolicRegexNodeKind.Alternate: 1960case SymbolicRegexNodeKind.FixedLengthMarker: 1964case SymbolicRegexNodeKind.BeginningAnchor: 1968case SymbolicRegexNodeKind.EndAnchor: 1971case SymbolicRegexNodeKind.BOLAnchor: 1975case SymbolicRegexNodeKind.EOLAnchor: 1978case SymbolicRegexNodeKind.EndAnchorZ: 1982case SymbolicRegexNodeKind.EndAnchorZReverse: 1986case SymbolicRegexNodeKind.DisableBacktrackingSimulation: 1991case SymbolicRegexNodeKind.Epsilon: 1992case SymbolicRegexNodeKind.Singleton: 1993case SymbolicRegexNodeKind.BoundaryAnchor: 1994case SymbolicRegexNodeKind.NonBoundaryAnchor: 2009case SymbolicRegexNodeKind.Loop: 2012case SymbolicRegexNodeKind.Concat: 2016case SymbolicRegexNodeKind.Alternate: 2020case SymbolicRegexNodeKind.DisableBacktrackingSimulation: 2030private static TSet ComputeStartSet(SymbolicRegexBuilder<TSet> builder, SymbolicRegexNodeKind kind, SymbolicRegexNode<TSet>? left, SymbolicRegexNode<TSet>? right) 2034Debug.Assert(kind != SymbolicRegexNodeKind.Singleton); 2039case SymbolicRegexNodeKind.Epsilon: 2040case SymbolicRegexNodeKind.FixedLengthMarker: 2041case SymbolicRegexNodeKind.EndAnchor: 2042case SymbolicRegexNodeKind.BeginningAnchor: 2043case SymbolicRegexNodeKind.BoundaryAnchor: 2044case SymbolicRegexNodeKind.NonBoundaryAnchor: 2045case SymbolicRegexNodeKind.EOLAnchor: 2046case SymbolicRegexNodeKind.EndAnchorZ: 2047case SymbolicRegexNodeKind.EndAnchorZReverse: 2048case SymbolicRegexNodeKind.BOLAnchor: 2049case SymbolicRegexNodeKind.CaptureStart: 2050case SymbolicRegexNodeKind.CaptureEnd: 2053case SymbolicRegexNodeKind.Loop: 2057case SymbolicRegexNodeKind.Concat: 2061case SymbolicRegexNodeKind.Alternate: 2065case SymbolicRegexNodeKind.DisableBacktrackingSimulation: 2066case SymbolicRegexNodeKind.Effect: 2114case SymbolicRegexNodeKind.BeginningAnchor: 2119case SymbolicRegexNodeKind.EndAnchorZReverse: 2124case SymbolicRegexNodeKind.BoundaryAnchor: 2131case SymbolicRegexNodeKind.NonBoundaryAnchor: 2138case SymbolicRegexNodeKind.Loop: 2145case SymbolicRegexNodeKind.Concat: 2157case SymbolicRegexNodeKind.Alternate: 2169case SymbolicRegexNodeKind.Effect: 2178case SymbolicRegexNodeKind.DisableBacktrackingSimulation: 2209case SymbolicRegexNodeKind.FixedLengthMarker: 2212case SymbolicRegexNodeKind.Alternate: 2226case SymbolicRegexNodeKind.Concat: 2236/// A <see cref="SymbolicRegexNodeKind.DisableBacktrackingSimulation"/> node on the top level will be unwrapped 2244case SymbolicRegexNodeKind.DisableBacktrackingSimulation: 2247Debug.Assert(_left._kind is not SymbolicRegexNodeKind.DisableBacktrackingSimulation); 2254case SymbolicRegexNodeKind.Alternate: 2257while (current._kind is SymbolicRegexNodeKind.Alternate) 2260Debug.Assert(current._left._kind is not SymbolicRegexNodeKind.Alternate); 2304case SymbolicRegexNodeKind.Singleton: 2307case SymbolicRegexNodeKind.Concat: 2308case SymbolicRegexNodeKind.Alternate: 2313case SymbolicRegexNodeKind.Loop: 2356case SymbolicRegexNodeKind.DisableBacktrackingSimulation: 2357case SymbolicRegexNodeKind.Effect: 2386case SymbolicRegexNodeKind.Loop: 2393case SymbolicRegexNodeKind.Concat: 2399case SymbolicRegexNodeKind.Effect: 2400case SymbolicRegexNodeKind.DisableBacktrackingSimulation: