Skip to content

Commit a73f874

Browse files
committed
replace rule
1 parent 1fa17cd commit a73f874

File tree

11 files changed

+97
-22
lines changed

11 files changed

+97
-22
lines changed

src/SimpleStateMachine.StructuralSearch.Sandbox/Program.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,13 @@ internal static class Program
1414
static void Main(string[] args)
1515
{
1616
var tesds = ParametersParser.StringFormatParameter.ParseOrThrow("\"tfasdfa\\\"sd$var$.Lenght\"");
17-
17+
var replaceRule = StructuralSearch.ParseReplaceRule("$var$ equals $var$ => $var$");
1818

1919
var rule = StructuralSearch.ParseFindRule("$var$ equals $var$.Lenght and Not StartsWith \"123\\\" $var$ \\\"\"");
2020
var rule2 = StructuralSearch.ParseFindRule("$var$ equals $var$.Offset.Start and Not StartsWith \"123\"");
21-
var result1 = rule.Execute("test");
22-
var result2 = rule.Execute("10");
23-
var result3 = rule.Execute("5.3");
21+
// var result1 = rule.Execute("test");
22+
// var result2 = rule.Execute("10");
23+
// var result3 = rule.Execute("5.3");
2424

2525
var t = ExprParser.ParseOrThrow("2 + 2 + 2");
2626
var resw = t.Invoke();

src/SimpleStateMachine.StructuralSearch.Tests/RuleParserTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public class RuleParserTests
1212
[InlineData("Not equals $var$.offset.Start")]
1313
[InlineData("equals $var$.Lenght and Not StartsWith \"123\"")]
1414
[InlineData("equals $var$.Lenght and Not StartsWith \"\\\"Test\"")]
15-
public void TemplateParsingShouldBeSuccess(string ruleStr)
15+
public void FindRuleParsingShouldBeSuccess(string ruleStr)
1616
{
1717
var rule = FindRuleParser.Expr.ParseOrThrow(ruleStr);
1818
var _ruleStr = rule.ToString()?.ToLower();

src/SimpleStateMachine.StructuralSearch/Constant.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,16 @@ public static partial class Constant
8787
/// </summary>
8888
public static readonly char Dote = '.';
8989

90+
/// <summary>
91+
/// Char: '='
92+
/// </summary>
93+
public static readonly char Equals = '=';
94+
95+
/// <summary>
96+
/// Char: '>'
97+
/// </summary>
98+
public static readonly char More = '>';
99+
90100
/// <summary>
91101
/// Parenthesis chars: '(' and ')'
92102
/// </summary>

src/SimpleStateMachine.StructuralSearch/Rule/FindRule/Rule.cs renamed to src/SimpleStateMachine.StructuralSearch/Rule/FindRule/FindRule.cs

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,16 @@
11
namespace SimpleStateMachine.StructuralSearch.Rules
22
{
3-
public class Rule:IRule
3+
public class FindRule
44
{
55
public string Placeholder { get; }
66

77
private IRule _rule { get; }
88

9-
public Rule(string placeholder, IRule rule)
9+
public FindRule(string placeholder, IRule rule)
1010
{
1111
Placeholder = placeholder;
1212
_rule = rule;
1313
}
14-
15-
public bool Execute(string value)
16-
{
17-
return _rule.Execute(value);
18-
}
1914

2015
public override string ToString()
2116
{
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
using SimpleStateMachine.StructuralSearch.Rules;
2+
3+
namespace SimpleStateMachine.StructuralSearch
4+
{
5+
public class ChangeParameter : IRuleParameter
6+
{
7+
public IRuleParameter Parameter { get; }
8+
public ChangeType Type { get; }
9+
10+
public ChangeParameter(IRuleParameter parameter, ChangeType type)
11+
{
12+
Parameter = parameter;
13+
Type = type;
14+
}
15+
16+
public string GetValue()
17+
{
18+
throw new System.NotImplementedException();
19+
}
20+
}
21+
}

src/SimpleStateMachine.StructuralSearch/Rule/ReplaceRule/ChangeType.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@
22
{
33
public enum ChangeType
44
{
5-
NotCorrect = 0,
6-
Trim,
5+
Trim = 0,
76
TrimEnd,
87
TrimStart,
98
ToUpper,
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
using Pidgin;
2+
using SimpleStateMachine.StructuralSearch.Extensions;
3+
using SimpleStateMachine.StructuralSearch.Rules;
4+
5+
namespace SimpleStateMachine.StructuralSearch
6+
{
7+
public class ReplaceRule
8+
{
9+
public FindRule FindRule { get; }
10+
11+
public IRuleParameter Parameter { get; }
12+
13+
public ReplaceRule(FindRule findRule, IRuleParameter parameter)
14+
{
15+
FindRule = findRule;
16+
Parameter = parameter;
17+
}
18+
19+
public override string ToString()
20+
{
21+
return $"{FindRule}{Constant.Space}{Parameter}";
22+
}
23+
}
24+
}

src/SimpleStateMachine.StructuralSearch/StructuralSearch/CommonTemplateParser.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ internal static readonly Parser<char, string> Placeholder
1616
internal static readonly Parser<char, string> StringWithPlshd
1717
= AnyCharWithPlshd.AtLeastOnceString();
1818

19+
internal static readonly Parser<char, string> Should
20+
= Parsers.Stringc(Constant.Equals).Then(Parsers.Stringc(Constant.More),
21+
(c1, c2) => c1 + c2);
22+
1923
//can be contains one $
2024
internal static readonly Parser<char, string> StringWithoutPlaceholder
2125
= Any.AtLeastOnceAsStringUntilNot(Placeholder);

src/SimpleStateMachine.StructuralSearch/StructuralSearch/FindRulesParser.cs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -57,13 +57,12 @@ internal static readonly Parser<char, Func<IRule, IRule>> Not
5757
)
5858
);
5959

60-
internal static readonly Parser<char, IRule> Rule =
61-
Parser.Map((name, rule) => new Rule(name, rule),
60+
internal static readonly Parser<char, FindRule> Rule =
61+
Parser.Map((name, rule) => new FindRule(name, rule),
6262
CommonTemplateParser.Placeholder.TrimStart(),
63-
Expr.TrimStart())
64-
.As<char, Rule, IRule>();
63+
Expr.TrimStart());
6564

66-
internal static IRule ParseTemplate(string str)
65+
internal static FindRule ParseTemplate(string str)
6766
{
6867
return Rule.ParseOrThrow(str);
6968
}
Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,27 @@
1-
namespace SimpleStateMachine.StructuralSearch
1+
using Pidgin;
2+
using SimpleStateMachine.StructuralSearch.Extensions;
3+
using SimpleStateMachine.StructuralSearch.Rules;
4+
5+
namespace SimpleStateMachine.StructuralSearch
26
{
3-
public class ReplaceRuleParser
7+
public static class ReplaceRuleParser
48
{
9+
internal static readonly Parser<char, IRuleParameter> ChangeParameter =
10+
Parser.Map((parameter, changeType) => new ChangeParameter(parameter, changeType),
11+
ParametersParser.Parameter.Before(CommonParser.Dote),
12+
Parsers.Enum<ChangeType>(true))
13+
.As<char, ChangeParameter, IRuleParameter>()
14+
.Try()
15+
.TrimStart();
516

17+
internal static readonly Parser<char, ReplaceRule> ReplaceRule =
18+
Parser.Map((rule, parameter) => new ReplaceRule(rule, parameter),
19+
FindRuleParser.Rule.Before(CommonTemplateParser.Should),
20+
Parser.OneOf(ChangeParameter, ParametersParser.Parameter));
21+
22+
internal static ReplaceRule ParseTemplate(string str)
23+
{
24+
return ReplaceRule.ParseOrThrow(str);
25+
}
626
}
727
}

0 commit comments

Comments
 (0)