Utilizando Parsec para analizar expresiones regulares

Estoy tratando de aprender Parsec implementando un pequeño analizador de expresiones regulares. En BNF, mi gramática se parece a:

EXP  : EXP *
     | LIT EXP
     | LIT

He intentado implementar esto en Haskell como:

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 ++ "*")

Sin embargo, aquí hay algunos bucles infinitos (por ejemplo, expr -> estrella -> expr sin consumir ningún token), lo que hace que el analizador se repita para siempre. Sin embargo, no estoy seguro de cómo solucionarlo, porque la naturaleza misma destar es que consume su token obligatorio al final.

¿Alguna idea

Respuestas a la pregunta(4)

Su respuesta a la pregunta