Algunos caracteres especiales solo se permiten si van precedidos de un carácter de escape

Aug 18 2020

Quiero construir una expresión regular (al estilo de lex, con una sintaxis más parecida a OCaml) para una clase de cadenas, donde se permiten 4 caracteres [, ], #, 'solo si están precedidos por un carácter de escape' .

Aquí hay algunos ejemplos válidos:

  • '#Data, abc'#Headers, abc'#Totals'[efg, 123'#Totals']efg, abc,123

Aquí hay algunos ejemplos no válidos:

  • #Data, abc#Headers, abc#Totals[efg, 123#Totals]efg,'#Totals[efg

Espero que la definición sea clara. Primero, ¿alguien sabe cómo construir una expresión regular de este tipo? En segundo lugar, ¿alguien sabe cómo construir una expresión regular de este tipo (al estilo de lex, con una sintaxis más parecida a OCaml) que pueda ser aceptada por ocamllex?

Respuestas

JeffreyScofield Aug 18 2020 at 08:01

No dices que las cadenas aceptadas se parecen más que con algunos ejemplos. Solo para ser concretos, digamos que se permiten letras en minúsculas y dígitos, y los 4 caracteres especiales solo se permiten si van precedidos de '.

Esto, entonces, se describe mediante el cierre de Kleene de un conjunto de 36 cadenas de un carácter y 4 cadenas de dos caracteres.

Que se parece a esto:

 (['a' - 'z' '0' - '9'] | '\'' ['\'' '#' '[' ']'])*