2
次のパーサーは、任意の入力に対して無限ループを入力します。このParsecパーサはなぜ無限ループに入るのですか?
data Ast
= Number Int
| Identifier String
| Operation Ast BinOp Ast
deriving (Show, Eq)
data BinOp = Plus | Minus
deriving (Show, Eq, Enum)
number = Number <$> read <$> many1 digit
identifier = Identifier <$> many1 letter
operator = choice $ mkParser <$> [(Plus, '+'), (Minus, '-')]
where mkParser (f, c) = f <$ char c
operation = Operation <$> ast <*> operator <*> ast
ast :: Parser Ast
ast = operation <|> number <|> identifier
問題は操作パーサーのどこかにあります。私はそれが代替構文解析に関係していると仮定しますが、私はそれを理解しません。
問題の原因を説明できますか?
ありがとうございます!