Files
regex-tools/docs/PARSER_PROFILES.md

44 lines
3.7 KiB
Markdown

# Syntax provider profile
Regex Tools has one public profile:
```text
community
```
It uses reviewed open-source dependencies and builds without private registry
credentials. No licensed parser is installed, referenced or required.
JavaScript/ECMAScript uses regexpp 4.12.2 for ECMAScript 2025 syntax. That is
the only current complete grammar-backed normalized syntax tree. All other
profiles use application-owned, deliberately partial lexical providers:
| Profile | Authoritative compiler | Lexical-provider boundary |
| ----------------------- | --------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
| PCRE2 | Standalone PCRE2 10.47 | Common captures and PCRE2 constructs; no complete structural grammar or branch-reset numbering |
| PHP | PHP 8.5.8 `preg` / PCRE2 10.44 | Common PCRE2/PHP capture forms and numbered replacement references; no delimiter or complete `preg` template model |
| Perl | Perl 5.28.1 via legacy WebPerl 0.09-beta | Common captures and fixed bridge references only; embedded code and complete Perl interpolation are unavailable |
| Python | CPython 3.14.2 `re` | Common Python captures and replacement references |
| Ruby | CRuby 4.0.0 `Regexp` | Common Onigmo capture forms and `String#gsub` references |
| Java | TeaVM 0.15.0 `java.util.regex` | Common Java captures and TeaVM replacement subset; not OpenJDK |
| C++ | Emscripten 6.0.4 libc++ `std::wregex` | Capture discovery only for the default modified ECMAScript grammar; alternate grammars remain compiler-authoritative |
| Go | Go 1.26.5 standard-library `regexp` | Common RE2 capture forms and `regexp.Expand` references |
| Rust | Rust `regex` crate 1.13.1 | Common capture forms and `Captures::expand` references |
| .NET | .NET 10.0.10 `System.Text.RegularExpressions` | Common captures/substitutions; no balancing-group or capture-history structure |
| Scala/JVM compatibility | Same TeaVM 0.15.0 Java engine | Java-compatible syntax only; no Scala runtime, wrapper or extractor model |
The Java and Scala providers follow the bundled TeaVM 0.15.0 replacement
subset: single-digit `$n` is executable, `$12` is `$1` followed by literal
`2`, and `${name}` is surfaced as a compatibility limitation. The Scala
provider deliberately shares that implementation and says so.
Every partial provider exposes its gaps through coverage metadata. Actual
acceptance, capture numbering and replacement output always come from the
selected runtime. ECMAScript analysis, case generation and formatting are not
applied to these partial trees.
The product deliberately does not implement or reference an `@r101/parser`
profile. No commercial package alias, import, tarball, credential, licence key
or private CI path exists. Further syntax coverage can grow behind the same
application-owned interface without changing the runtime identity.