pandaman64/lean-regex

Correctly fail invalid range operators

Ouverte

#152 ouverte le 30 déc. 2025

 (0 commentaire) (1 réaction) (0 personne assignée)Lean (14 forks)auto 404
bughelp wanted

Métriques du dépôt

Stars
 (109 étoiles)
Métriques de merge PR
 (Merge moyen 12h 48m) (2 PRs mergées en 30 j)

Description

We have extended the bracketed character class parsers with new capabilities like #150 while breaking error handling of range operators. Namely,

  • [z-a] should be an error (as the range is valid only if 'z' ≦ 'a'), but is treated as a union of z, -, and a.
  • Also, [\d-a] should be an error, but accepted as a union

We want to restore the original behavior that returns .error .invalidRange in such cases.

I'd expect that we need a rework of the bracketed class parsers to conform to a grammar like this:

escapedChar   ::= '\' c
singleChar    ::= c (except for '[', ']', '\', ...)
atom          ::= escapedChar | singleChar
rangeExpr     ::= atom ('-' atom)?
setOp         ::= '&&' | '||' | '--' | '~~'
setExpr       ::= bracketed (setOp bracketed)*
singleExpr    ::= rangeExpr | setExpr
bracketed     ::= '[' ('^')? singleExpr* ']'

The idea is to make a range expression a proper level in the hierarchy and insert .commit at appropriate levels.

Guide contributeur