Написание регулярного выражения для четного числа символов `A` - PullRequest
0 голосов
/ 08 ноября 2019

Я пытаюсь создать регулярное выражение в haskell для языка поверх ABC, содержащее строки с четным числом A s. Я прохожу почти все тестовые случаи, но пропускаю несколько. Неисправности:

INCORRECT: [C,A,B,A,A,C,B,B,C,A]
       wanted: True
       got:    False

INCORRECT: [B,C,B]
       wanted: True
       got:    False

А вот мое выражение:

two :: RE ABC
two =  Repeat (Symbol B :* Symbol C :+ Symbol A :* Repeat (Symbol B) :* Repeat (Symbol C) :* Symbol A )

Вот заголовок:

data RE sym

    = Never             -- match no strings
    | Empty             -- match empty string
    | Symbol sym        -- match singleton string
    | RE sym :+ RE sym  -- choice
    | RE sym :* RE sym  -- concatenation
    | Repeat (RE sym)   -- repeat zero or more times
    | Plus (RE sym)     -- repeat one or more times
    deriving (Show, Eq)

infixr 6 :+, .+.

infixr 7 :* and .*.

Что я делаю не так?

...