Использование Parsec для разбора регулярных выражений

Я пытаюсь изучить Parsec, внедрив небольшой синтаксический анализатор регулярных выражений. В BNF моя грамматика выглядит примерно так:

EXP  : EXP *
     | LIT EXP
     | LIT

Я попытался реализовать это в Haskell как:

expr = try star
       <|> try litE
       <|> lit

litE  = do c <- noneOf "*"
           rest <- expr
           return (c : rest)

lit   = do c <- noneOf "*"
           return [c]

star = do content <- expr
          char '*'
          return (content ++ "*")

Здесь есть несколько бесконечных циклов (например, expr -> star -> expr без использования каких-либо токенов), что делает цикл синтаксического анализатора вечным. Я не совсем уверен, как это исправить, потому что сама природаstar является то, что он потребляет свой обязательный токен в конце.

есть идеи?

Ответы на вопрос(2)

Ваш ответ на вопрос