Skip to content

Commit 99142fd

Browse files
committed
refact, some fix and placeholder parameter in rule
1 parent 3f990b8 commit 99142fd

28 files changed

+148
-55
lines changed

src/SimpleStateMachine.StructuralSearch.Sandbox/Program.cs

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,29 @@
11
using System.Text.RegularExpressions;
22
using Pidgin;
3+
using SimpleStateMachine.StructuralSearch.Extensions;
4+
using SimpleStateMachine.StructuralSearch.Rules;
35
using static Pidgin.Parser;
6+
using String = System.String;
47

58
namespace SimpleStateMachine.StructuralSearch.Sandbox
69
{
710
internal static class Program
811
{
912
static void Main(string[] args)
1013
{
11-
12-
13-
14-
var rule = StructuralSearch.ParseFindRule("$var$ Not (Is int or equals \"test\") and match \"^[0-9]+.[0-9]+$\"");
14+
var tr = SubRuleParser.UnarySubRule.ParseOrThrow("equals $var$.Lenght");
15+
var rule = StructuralSearch.ParseFindRule("$var$ equals $var$ .Lenght");
1516
var result1 = rule.Execute("test");
16-
var result2 = rule.Execute("125");
17+
var result2 = rule.Execute("10");
1718
var result3 = rule.Execute("5.3");
1819

19-
20-
21-
2220
var t = ExprParser.ParseOrThrow("2 + 2 + 2");
2321
var resw = t.Invoke();
2422
var test = String("return ")
2523
.Then(AnyCharExcept(';').ManyString())
2624
.Then(Char(';').AtLeastOnceString())
2725
.Before(Char(';'));
2826

29-
30-
31-
3227
// var template = StructuralSearch.ParseTemplate("");
3328
// var test = Parser.OneOf(String("Test"), CommonParser.Empty);
3429
var res = test.ParseOrThrow("return 125;;;;");

src/SimpleStateMachine.StructuralSearch/Constant.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,11 @@ public static partial class Constant
7777
/// </summary>
7878
public static readonly char DoubleQuotes = '\"';
7979

80+
/// <summary>
81+
/// Char: '.'
82+
/// </summary>
83+
public static readonly char Dote = '.';
84+
8085
/// <summary>
8186
/// Parenthesis chars: '(' and ')'
8287
/// </summary>

src/SimpleStateMachine.StructuralSearch/Extensions/ParserExtensions.cs

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,7 @@ public static Parser<TToken, T> Try<TToken, T>(this Parser<TToken, T> parser)
1111
{
1212
return Parser.Try(parser);
1313
}
14-
15-
14+
1615
public static Parser<TToken, IEnumerable<T>> AsMany<TToken, T>(this Parser<TToken, T> parser)
1716
{
1817
return parser.Select(x => (IEnumerable<T>)new List<T> { x });
@@ -26,7 +25,6 @@ public static Parser<TToken, IEnumerable<T>> AtLeastOnceUntilNot<TToken, T, U>(t
2625
: throw new ArgumentNullException(nameof(parser));
2726
}
2827

29-
3028
public static Parser<TToken, IEnumerable<T>> UntilNot<TToken, T, U>(this Parser<TToken, T> parser,
3129
Parser<TToken, U> terminator)
3230
{
@@ -39,10 +37,10 @@ public static bool TryParse(this Parser<char, string> parser, string value, out
3937
{
4038
if(parser is null)
4139
throw new ArgumentNullException(nameof(parser));
42-
43-
var res = parser.Try().Optional().ParseOrThrow(value, null);
44-
result = res.HasValue ? res.Value : default;
45-
return res.HasValue;
40+
41+
var res = parser.Parse(value);
42+
result = res.Success ? res.Value : default;
43+
return res.Success;
4644
}
4745
public static Parser<TToken, bool> Contains<TToken, T>(this Parser<TToken, T> parser)
4846
{
@@ -112,6 +110,11 @@ public static Parser<TToken, R> As<TToken, T, R>(this Parser<TToken, T> parser)
112110
{
113111
return parser.Select(x => (R)x);
114112
}
113+
114+
public static Parser<TToken, T> After<TToken, T, U>(this Parser<TToken, T> parser, Parser<TToken, U> parserAfter)
115+
{
116+
return parserAfter.Then(parser, (u, t) => t);
117+
}
115118

116119
// public static Parser<TToken, T> BetweenAsThen<TToken, T, U, V>(this Parser<TToken, T> parser, Parser<TToken, U> parser1, Parser<TToken, V> parser2, Func<U, T, V, T> func)
117120
// {

src/SimpleStateMachine.StructuralSearch/Extensions/StringParserExtensions.cs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,21 @@ public static Parser<TToken, SourceMatch> AsMatch<TToken>(this Parser<TToken, st
5757
return parser.Then(Parser<TToken>.CurrentOffset, (s, offset) => new SourceMatch(s, offset - s.Length, offset));
5858
}
5959

60-
public static Parser<char, T> Trim<T>(this Parser<char, T> parser)
60+
public static Parser<char, T> TrimEnd<T>(this Parser<char, T> parser)
6161
{
6262
return parser.Before(SkipWhitespaces);
6363
}
6464

65+
public static Parser<char, T> TrimStart<T>(this Parser<char, T> parser)
66+
{
67+
return parser.After(SkipWhitespaces);
68+
}
69+
70+
public static Parser<char, T> Trim<T>(this Parser<char, T> parser)
71+
{
72+
return parser.Between(SkipWhitespaces);
73+
}
74+
6575
public static Parser<char, TEnum> AsEnum<TEnum>(this Parser<char, string> parser, bool ignoreCase)
6676
where TEnum: struct, Enum
6777
{

src/SimpleStateMachine.StructuralSearch/Parsers/Parsers.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,12 @@ public static Parser<char, string> String(string value, bool ignoreCase)
1717
return ignoreCase ? Parser.CIString(value): Parser.String(value);
1818
}
1919

20+
public static Parser<char, TEnum> After<TEnum>(TEnum value, bool ignoreCase = false)
21+
where TEnum : struct, Enum
22+
{
23+
return Parsers.String(value.ToString(), ignoreCase).AsEnum<TEnum>(ignoreCase);
24+
}
25+
2026
// public static Parser<char, string> EnumValue<TEnum>(TEnum value, bool ignoreCase = false)
2127
// where TEnum : struct, Enum
2228
// {

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

File renamed without changes.

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22
{
33
public enum BinaryRuleType
44
{
5-
And = 0,
5+
NotCorrect = 0,
6+
And,
67
Or,
78
NAND,
89
NOR,

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

File renamed without changes.

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

File renamed without changes.

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

File renamed without changes.

0 commit comments

Comments
 (0)