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