2
다음 파서는 모든 입력에 대해 무한 루프를 입력합니다.왜이 파섹 파서는 무한 루프를 입력합니까?
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
문제는 작업 구문 분석기의 어딘가에 있습니다. 대체 파싱과 관련 있다고 생각하지만 이해가되지 않습니다.
문제의 원인을 설명해 주시겠습니까?
감사합니다.