Я пытаюсь создать регулярное выражение в 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 .*.
Что я делаю не так?