public override string ToString() { return("Matching:" + string.Join(", ", MatchingCharacters.Select((item, i) => $"[{i}] = {string.Join("|", item.Select(r => $"{r.Data1}...{r.Data2}"))}")) + " Failing: " + string.Join(", ", FailingCharacters.Select((item, i) => $"[{i}] = {string.Join("|", item.Select(r => $"{r.Data1}...{r.Data2}"))}"))); }
public CharCheckEntry MatchSuccess(OptimizationContext context, Instruction instruction) { var matching = MatchingCharacters.Clone(); AddEntry(instruction, true, instruction.Offset, matching); matching[instruction.Offset].RemoveAll(existing => InstructionHelper.NonJumpMatchWillFail(context, existing, instruction)); return(new CharCheckEntry(matching, FailingCharacters)); }
public NdState MatchSuccess(OptimizationContext context, Instruction instruction, int offset) { var matching = MatchingCharacters.Clone(); AddEntry(instruction, true, offset, matching); matching[offset].RemoveAll(existing => InstructionHelper.NonJumpMatchWillFail(context, existing, instruction)); return(new NdState(Variable, Vug, PositionA, PositionB, AdvancesA, AdvancesB, MinBounds, MaxBounds, VarAs, VarBs, matching, FailingCharacters)); }
public CharCheckEntry Advance(int offset) { var matching = MatchingCharacters.Clone(); var failing = FailingCharacters.Clone(); for (var i = 0; i < offset; i++) { if (matching.Count > 0) { matching.PopFront(); } if (failing.Count > 0) { failing.PopFront(); } } return(new CharCheckEntry(matching, failing)); }
private char GetMatchCloseCharacter(char c) { return(MatchingCharacters.First(pair => pair.Key == c).Value); }
private bool IsMatchCloseCharacter(char c) { return(MatchingCharacters.Any(pair => pair.Value == c)); }
private bool IsMatchStartCharacter(char c) { return(MatchingCharacters.Any(pair => pair.Key == c)); }
private char GetMatchOpenCharacter(char c) { return(MatchingCharacters.First(pair => pair.Value == c).Key); }
protected virtual char GetMatchOpenCharacter(char c) { return(MatchingCharacters.First(pair => pair.Value == c).Key); }
protected virtual char GetMatchCloseCharacter(char c) { return(MatchingCharacters.First(pair => pair.Key == c).Value); }
protected virtual bool IsMatchCloseCharacter(char c) { return(MatchingCharacters.Any(pair => pair.Value == c)); }
protected virtual bool IsMatchStartCharacter(char c) { return(MatchingCharacters.Any(pair => pair.Key == c)); }
public override string ToString() { return($"({PositionA}, {AdvancesA}) ({PositionB}, {AdvancesB}); {MinBounds} <= B <= {MaxBounds}; Matching {string.Join(", ", MatchingCharacters.Select((item, i) => $"[{i}] = {string.Join("|", item.Select(r => $"{r.Data1}...{r.Data2}"))}"))}; Failing {string.Join(", ", FailingCharacters.Select((item, i) => $"[{i}] = {string.Join("|", item.Select(r => $"{r.Data1}...{r.Data2}"))}"))};"); }