BNFC3-3.0: A compiler front-end generator.
Safe HaskellNone
LanguageHaskell2010

BNFC.Types.Regex

Description

Tools to manipulate regular expressions.

Synopsis

Regular expressions

data Regex Source #

Regular expressions are constructed over character classes.

Use smart constructors to ensure invariants.

Constructors

RChar CharClass

Atomic regular expression.

RAlts (List2 Regex)

Alternative/sum: List free of duplicates and RAlt. We use list instead of set to preserve the order given by the user. Empty list would mean empty language, but this is instead represented by the empty character class.

RMinus Regex Regex

Difference. Most lexer generators do not support difference in general, only at the level of character classes. LBNF has general difference, so it is represented here.

REps

Language of the empty word (empty sequence).

RSeqs (List2 Regex)

Sequence/product. List free of RSeq. Empty list is eps (language of the empty word).

RStar Regex

0 or more repetitions. Regex isn't RStar, RPlus, ROpt, RAlts [] nor REps.

RPlus Regex

1 or more repetitions. Regex isn't RStar, RPlus, ROpt, RAlts [] nor REps.

ROpt Regex

0 or 1 repetitions. Regex isn't RStar, RPlus, ROpt, RAlts [] nor REps.

Instances

Instances details
Eq Regex Source # 
Instance details

Defined in BNFC.Types.Regex

Methods

(==) :: Regex -> Regex -> Bool Source #

(/=) :: Regex -> Regex -> Bool Source #

Ord Regex Source # 
Instance details

Defined in BNFC.Types.Regex

Show Regex Source # 
Instance details

Defined in BNFC.Types.Regex

Satisfiable Regex Source # 
Instance details

Defined in BNFC.Types.Regex

ReifyRegex Regex Source # 
Instance details

Defined in BNFC.Check.Regex

Methods

reifyRegex :: Regex -> Reg Source #

Print Regex Source # 
Instance details

Defined in BNFC.Backend.Txt2Tags.Txt2Tags

Methods

prt :: Int -> Regex -> Doc () Source #

Print Regex Source # 
Instance details

Defined in BNFC.Backend.Latex.Latex

Methods

prt :: Int -> Regex -> Doc () Source #

Print Regex Source # 
Instance details

Defined in BNFC.Backend.Haskell.Lexer

Methods

prt :: Int -> Regex -> Doc () Source #

pattern REmpty :: Regex Source #

pattern RAlt :: Regex -> Regex -> Regex Source #

pattern RSeq :: Regex -> Regex -> Regex Source #

nullable :: Regex -> Bool Source #

Check if a regular expression is nullable (accepts the empty string).

class Satisfiable a where Source #

Check if a regular expression matches at least one word.

For differences, this check may err on the positive side.

Methods

satisfiable :: a -> Bool Source #

Instances

Instances details
Satisfiable CharClassUnion Source # 
Instance details

Defined in BNFC.Types.Regex

Satisfiable CharClass Source # 
Instance details

Defined in BNFC.Types.Regex

Satisfiable Regex Source # 
Instance details

Defined in BNFC.Types.Regex

Character classes

data CharClass Source #

Character classes are regular expressions that recognize character sequences of length exactly one. These are often distinguished from arbitrary regular expressions in lexer generators, e.g. in alex.

We represent character classes as a difference of unions of atomic character classes.

Semantics: ⟦ CMinus ccYes ccNo ⟧ = ⟦ ccYes ⟧ ⟦ ccNo ⟧

Constructors

CMinus 

Fields

  • ccYes :: CharClassUnion

    Character in question must be in one of these character classes.

  • ccNo :: CharClassUnion

    Character in question must not be in one of these character classes. Must be empty if ccYes is empty.

data CharClassUnion Source #

Possibly overlapping union of character classes.

Constructors

CAny

Any character, LBNF char.

CAlt [CharClassAtom]

Any of the given (≥0) alternatives. List is free of duplicates.

Instances

Instances details
Eq CharClassUnion Source # 
Instance details

Defined in BNFC.Types.Regex

Ord CharClassUnion Source # 
Instance details

Defined in BNFC.Types.Regex

Show CharClassUnion Source # 
Instance details

Defined in BNFC.Types.Regex

Semigroup CharClassUnion Source #

Union of character class unions.

Instance details

Defined in BNFC.Types.Regex

Monoid CharClassUnion Source # 
Instance details

Defined in BNFC.Types.Regex

Satisfiable CharClassUnion Source # 
Instance details

Defined in BNFC.Types.Regex

ReifyRegex CharClassUnion Source # 
Instance details

Defined in BNFC.Check.Regex

Print CharClassUnion Source # 
Instance details

Defined in BNFC.Backend.Txt2Tags.Txt2Tags

Methods

prt :: Int -> CharClassUnion -> Doc () Source #

Print CharClassUnion Source # 
Instance details

Defined in BNFC.Backend.Latex.Latex

Methods

prt :: Int -> CharClassUnion -> Doc () Source #

Print CharClassUnion Source # 
Instance details

Defined in BNFC.Backend.Haskell.Lexer

Methods

prt :: Int -> CharClassUnion -> Doc () Source #

data CharClassAtom Source #

Atomic character class.

Constructors

CChar Char

A single character.

CDigit

0-9, LBNF digit.

CLower

Lower case character, LBNF lower.

CUpper

Upper case character, LBNF upper.

Smart constructor for regular expressions.

rSeq :: Regex -> Regex -> Regex Source #

Simplifications included, but no distributivity.

cAlt :: CharClass -> CharClass -> Regex Source #

Disjunction of two character classes is either a character class again (RChar) or simply the disjunction (RAlt).

(p1 m1) ∪ (p2 m2) = (p1 ∪ p2) (m1 ∪ m2) if p1 ⊥ m2 and p2 ⊥ m1

cMinus :: CharClass -> CharClass -> Regex Source #

Disjunction of two character classes is either a character class again (RChar) or simply the disjunction (RMinus).

(p1 m1) (0 m2) = p1 m1 (p1 m1) (p2 m2) = p1 (m1 ∪ p2) if p1 m2 = p1

Smart constructors for character classes.

cChar :: Char -> CharClass Source #

Match given characters.

cAlts :: [Char] -> CharClass Source #

Match any of the given characters.

ccuMinus :: CharClassUnion -> CharClassUnion -> Either CharClass CharClassUnion Source #

Smart constructor for CharClass from difference..

Mutually reduce: (A - B) = (A B) - (B A)