PCRE2 Regex Features Support in ENFAStepLexer-StepParser

A modern, high-performance lexical analysis and parsing system with comprehensive PCRE2 support and CognitiveGraph integration

PCRE2 Regex Features Support in ENFAStepLexer-StepParser

Overview

This document describes the PCRE2 (Perl Compatible Regular Expression) features supported by the ENFAStepLexer-StepParser implementation based on the @DevelApp/enfaparser project.

Supported PCRE2 Features

✅ Basic Constructs

✅ Character Class Shortcuts

✅ Extended Anchors (NEW)

✅ Unicode and Extended Character Support (NEW)

✅ POSIX Character Classes (NEW)

✅ Escape Sequences

✅ Groups and Assertions

✅ Back References

✅ Alternation

✅ Special Characters

✅ Unicode Properties

❌ Unsupported PCRE2 Features

Advanced Features Not Implemented

  1. Conditional Patterns: (?(condition)yes|no)
    • Reasoning: Adds significant complexity to state machine logic
  2. Recursive Patterns: (?R), (?&name), (?1)
    • Reasoning: Requires stack-based recursion support in the StepLexer architecture
  3. Subroutines: (?1), (?-1), (?+1)
    • Reasoning: Similar to recursive patterns, needs subroutine call mechanisms
  4. Advanced Escape Sequences:
    • \K (keep everything up to this point)
    • \X (extended grapheme cluster)
    • Reasoning: These require advanced text processing beyond basic character matching
  5. Callouts and Code: (?C), (?{...})
    • Reasoning: Would require embedding executable code in patterns, significant security and complexity concerns
  6. Variable-Length Lookbehind
    • Reasoning: Current implementation assumes fixed-length lookbehind for efficiency

Note: Atomic grouping ((?>...)), possessive quantifiers (*+, ++, ?+), inline modifiers ((?i) etc.), quoted literal sequences, and (?#...) comments are now supported - see the re-evaluated atomic grouping section below and docs/atomic-grouping-evaluation.md.

Excluded Features (By Design)

The following features are intentionally excluded from the StepLexer-StepParser system due to architectural design decisions that prioritize performance, predictability, and maintainability.

✅ Atomic Grouping Support (Supported via Normalization)

Pattern Examples: (?>atomic), possessive quantifiers such as /\Qab\E++/

How Supported:

Scope:

See docs/atomic-grouping-evaluation.md for the full evaluation.

❌ Recursive Pattern Support

Pattern Examples: (?R), (?&name), (?1), (?-2)

Why Excluded:

Alternative Approaches:

Technical Benefits:

Example Alternative Pattern:

Instead of recursive regex:

(?R)  # Match nested parentheses recursively

Use StepParser grammar:

<balanced> ::= '(' <content> ')'
<content>  ::= <balanced> <content> | <char> <content> | ε
<char>     ::= /[^()]/

Architecture Notes

vNext Architecture Compatibility

The current implementation maintains compatibility with the planned vNext architecture by:

  1. Modular Design: Clear separation between tokenizer, parser, and state machine components
  2. Extensible Transitions: New transition types can be easily added to the RegexTransitionType enum
  3. Factory Pattern: New functionality can be added through factory extensions
  4. Step-wise Processing: The tokenizer processes patterns step-by-step, enabling future step-based optimizations

Performance Considerations

Implementation Quality

Code Quality

Testing Status

Future Enhancement Roadmap

Phase 1 (Immediate)

  1. Add comprehensive unit tests
  2. Fix nullable reference warnings
  3. Implement basic Unicode property validation
  4. Add pattern compilation validation

Phase 2 (Short-term)

  1. Implement inline modifiers ((?i), (?m), etc.)
  2. Add \Q...\E literal text support
  3. Implement comment support (?#...)
  4. Add more comprehensive error reporting

Phase 3 (Long-term)

  1. Consider atomic grouping support
  2. Evaluate recursive pattern feasibility
  3. Advanced Unicode support with ICU integration
  4. Performance optimization and benchmarking

Conclusion

The ENFAStepLexer-StepParser provides robust support for the most commonly used PCRE2 features while maintaining a clean, extensible architecture. The implementation covers approximately 70-80% of commonly used regex features, making it suitable for most practical applications while avoiding the complexity of advanced features that are rarely used in practice.