Некоторые специальные символы разрешены, только если им предшествует escape-символ.

Aug 18 2020

Я хочу построить регулярное выражение (в стиле Лекса, с более OCaml-подобный синтаксис) для класса строк, где 4 -х символов [, ], #, 'разрешено только если им предшествует экранирующего символа' .

Вот несколько действенных примеров:

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

Вот несколько недействительных примеров:

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

Надеюсь, определение ясное. Во-первых, кто-нибудь знает, как построить такое регулярное выражение? Во-вторых, знает ли кто-нибудь, как построить такое регулярное выражение (в стиле lex, с синтаксисом, более похожим на OCaml), которое может принять ocamllex?

Ответы

JeffreyScofield Aug 18 2020 at 08:01

Вы не говорите, что принятые строки выглядят иначе, чем на нескольких примерах. Для конкретности допустим, что строчные буквы и цифры разрешены, а 4 специальных символа разрешены, только если им предшествует '.

Это, таким образом, описывается закрытием Клини набора из 36 односимвольных строк и 4 двухсимвольных строк.

Это выглядит так:

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