diff --git a/StgSharp.RegularAnalysis/Abstraction/ISyntaxNode.cs b/StgSharp.RegularAnalysis/Abstraction/ISyntaxNode.cs index 0d816001..86ab7806 100644 --- a/StgSharp.RegularAnalysis/Abstraction/ISyntaxNode.cs +++ b/StgSharp.RegularAnalysis/Abstraction/ISyntaxNode.cs @@ -36,6 +36,15 @@ using System.Text; namespace StgSharp.RegularAnalysis.Abstraction { + public interface ITrinitySyntaxNode : ISyntaxNode + where TNode : ISyntaxNode + where TLabel : unmanaged + { + + TNode Third { get; set; } + + } + public interface ISyntaxNode where TNode : ISyntaxNode where TLabel : unmanaged { diff --git a/StgSharp.RegularAnalysis/Text/RegexInterpreter.IROptimize.cs b/StgSharp.RegularAnalysis/Text/RegexInterpreter.IROptimize.cs index 6a5de231..2e517d2d 100644 --- a/StgSharp.RegularAnalysis/Text/RegexInterpreter.IROptimize.cs +++ b/StgSharp.RegularAnalysis/Text/RegexInterpreter.IROptimize.cs @@ -87,7 +87,7 @@ namespace StgSharp.RegularAnalysis.Text break; } - if (TryFlatternCount(opt_win_sp, opt_ir)) { } + if (TryFlattenCount(opt_win_sp, opt_ir)) { } } while (false); index += process_count; @@ -150,7 +150,7 @@ namespace StgSharp.RegularAnalysis.Text #endregion - private static bool TryFlatternCount( + private static bool TryFlattenCount( Span window, List opt ) diff --git a/future/ngra-regex-ir.md b/future/ngra-regex-ir.md index 6e1e8224..de81e805 100644 --- a/future/ngra-regex-ir.md +++ b/future/ngra-regex-ir.md @@ -66,3 +66,7 @@ COUNT_SEQ(a,0,+inf,greedy) 5. a{m,n}特征,展开为 MATCH_SEQ(aa...m个a....aa) COUNT_SEQ(a,0,n,greedy) + +6. .*?a*$ + +7. 对于一般的.*?,应该将后续的所有东西全都放进一个巨大的try,code gen时使用最慢的一位一位offset直到直到第一个匹配rest的东西 \ No newline at end of file