0
나는 parsec 라이브러리를 시험 중이므로이 기본 작업을 처리하는 방법을 모르겠습니다.나머지 입력이 parsec로 공백인지 확인
data Foo = A | AB
내가 문자열 "A"A
로서 해석 할 수하고 "A B"AB
원하는 :
나는 다음과 같은 있다고 가정합시다. 난 그냥 이렇게하면 :
parseA :: parser Foo
parseA = do
reserved "a"
return A
parseAB :: parser Foo
parseAB = do
reserved "a"
reserved "b"
return AB
parseFoo :: parser Foo
parseFoo = parseA
<|> parseAB
는
parseFoo
는 여전히 'A'를 소모 한 후 왼쪽 공백이 아닌 있다는 것을 상관하지 않는다
parseA
이후
A
으로 "A B"를 구문 분석합니다. 이 문제를 어떻게 해결할 수 있습니까?
죄송합니다 작동합니다, 내가'parseAB' 잘 작동하는지 명확히해야, 내가 문제가 있습니다 parseFoo'은'입니다. – user181407
아, 알겠습니다. 문법은 역 추적이 필요합니다. –
문법을 AB | A와'시도'를 사용하여 parsec –