From 13fcfe4a4c31b5f1c481cf9d5d2b21d172494795 Mon Sep 17 00:00:00 2001 From: Youmu Liu <105042599+Nitload-NSI@users.noreply.github.com> Date: Fri, 26 Jun 2026 18:41:50 +0800 Subject: [PATCH] regex ir opt code rewrite gen2, window scanning --- StgSharp.RegularAnalysis/Abstraction/ISyntaxNode.cs | 9 +++++++++ .../Text/RegexInterpreter.IROptimize.cs | 4 ++-- future/ngra-regex-ir.md | 4 ++++ 3 files changed, 15 insertions(+), 2 deletions(-) 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