pandaman64/lean-regex

Correctly fail invalid range operators

Aperta

#152 aperta il 30 dic 2025

 (0 commenti) (1 reazione) (0 assegnatari)Lean (14 fork)auto 404
bughelp wanted

Metriche repository

Star
 (109 stelle)
Metriche merge PR
 (Metriche PR in attesa)

Descrizione

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.

Guida contributor