Các Combinator Cơ bản 1
Prelude Text.Parsec Text.Parsec.String> parseTest (count 3 (char 'a')) "aaa"
"aaa"
Prelude Text.Parsec Text.Parsec.String> parseTest (between (char '(') (char ')') anyChar) "(3)"
'3'
Prelude Text.Parsec Text.Parsec.String> parseTest (option ' ' (char 'a')) "b"
' '
Prelude Text.Parsec Text.Parsec.String> parseTest (optionMaybe (char 'a')) "b"
Nothing
Prelude Text.Parsec Text.Parsec.String> parseTest (optionMaybe (char 'b')) "b"
(Just 'b')
Prelude Text.Parsec Text.Parsec.String> parseTest ((,) <$> optional (char 'a') <*> getInput) "b"
((),"b")
Prelude Text.Parsec Text.Parsec.String> parseTest ((,) <$> optional (char 'a') <*> getInput) "a"
((),"")
Prelude Text.Parsec Text.Parsec.String> parseTest (optional (string "ab")) "a"
parse error at (line 1, column 1):
unexpected end of input
expecting "ab"
count n pthực hiện khớp parser p với n lần liên tiếp.between open close plần lượt khớp các parser open, p, và close, nhưng chỉ trả về kết quả của p.option x pcố gắng khớp parser p, nếu thất bại thì trả về giá trị mặc định x.optionMaybe pcố gắng khớp parser p, nếu thất bại trả về Nothing, nếu thành công trả về Just kết quả.optional pcố gắng khớp parser p, nếu thất bại không tiêu thụ input. Khi input không đủ sẽ báo lỗi. Khi không lỗi trả về giá trị rỗng.(,) <$> p <*> getInputkhớp parser p, sau đó sử dụng toán tử (,) để kết hợp kết quả với phần input còn lại. Hàm getInput trả về phần input còn lại sau khi hoàn thành khớp.
Các Combinator Cơ bản 2
Prelude Text.Parsec Text.Parsec.String> parseTest ((,) <$> skipMany1 (char 'a') <*> getInput) "aab"
((),"b")
Prelude Text.Parsec Text.Parsec.String> parseTest (sepBy (char 'a') (char ',')) "a"
"a"
Prelude Text.Parsec Text.Parsec.String> parseTest (sepBy (char 'a') (char ',')) "a,a,a"
"aaa"
Prelude Text.Parsec Text.Parsec.String> parseTest (sepBy (char 'a') (char ',')) ""
""
Prelude Text.Parsec Text.Parsec.String> parseTest (sepBy (char 'a') (char ',')) "a,"
parse error at (line 1, column 3):
unexpected end of input
expecting "a"
Prelude Text.Parsec Text.Parsec.String> parseTest (sepBy1 (char 'a') (char ',')) ""
parse error at (line 1, column 1):
unexpected end of input
expecting "a"
Prelude Text.Parsec Text.Parsec.String> parseTest (endBy (char 'a') (char ',')) "a,"
"a"
Prelude Text.Parsec Text.Parsec.String> parseTest (endBy (char 'a') (char ',')) "a,a,"
"aa"
Prelude Text.Parsec Text.Parsec.String> parseTest (endBy (char 'a') (char ',')) ""
""
Prelude Text.Parsec Text.Parsec.String> parseTest (endBy (char 'a') (char ',')) "a,a"
parse error at (line 1, column 4):
unexpected end of input
expecting ","
Prelude Text.Parsec Text.Parsec.String> parseTest (endBy1 (char 'a') (char ',')) ""
parse error at (line 1, column 1):
unexpected end of input
expecting "a"
Prelude Text.Parsec Text.Parsec.String> parseTest (sepEndBy (char 'a') (char ',')) "a"
"a"
Prelude Text.Parsec Text.Parsec.String> parseTest (sepEndBy (char 'a') (char ',')) "a,"
"a"
Prelude Text.Parsec Text.Parsec.String> parseTest (sepEndBy (char 'a') (char ',')) "a,a"
"aa"
Prelude Text.Parsec Text.Parsec.String> parseTest (sepEndBy (char 'a') (char ',')) "a,a,"
"aa"
Prelude Text.Parsec Text.Parsec.String> parseTest (sepEndBy (char 'a') (char ',')) ""
""
Prelude Text.Parsec Text.Parsec.String> parseTest (sepEndBy1 (char 'a') (char ',')) ""
parse error at (line 1, column 1):
unexpected end of input
expecting "a"
skipMany1 pcố gắng khớp và bỏ qua parser p một hoặc nhiều lần, trả về giá trị rỗng.sepBy p sepcố gắng khớp không hoặc nhiều lần chuỗi các p được phân cách bởi sep (phải kết thúc bằng p), trả về danh sách các p.sepBy1 p seplà phiên bản yêu cầu ít nhất một lần khớp.endBy p sepcố gắng khớp không hoặc nhiều lần chuỗi các p được phân cách bởi sep (phải kết thúc bằng sep), trả về danh sách các p.endBy1 p seplà phiên bản yêu cầu ít nhất một lần khớp.sepEndBy p sepcố gắng khớp không hoặc nhiều lần chuỗi các p được phân cách bởi sep (có thể kết thúc bằng p hoặc sep), trả về danh sách các p.sepEndBy1 p seplà phiên bản yêu cầu ít nhất một lần khớp.
Các Combinator Cơ bản 3
Prelude Text.Parsec Text.Parsec.String> parseTest eof ""
()
Prelude Text.Parsec Text.Parsec.String> parseTest eof "a"
parse error at (line 1, column 1):
unexpected 'a'
expecting end of input
Prelude Text.Parsec Text.Parsec.String> parseTest (notFollowedBy (char 'a')) "ab"
parse error at (line 1, column 2):
unexpected 'a'
Prelude Text.Parsec Text.Parsec.String> parseTest ((,) <$> notFollowedBy (char 'a') <*> getInput) "ba"
((),"ba")
Prelude Text.Parsec Text.Parsec.String> parseTest (manyTill (char 'a') (char 'b')) "aab"
"aa"
Prelude Text.Parsec Text.Parsec.String> parseTest (manyTill (char 'a') (char 'b')) "aac"
parse error at (line 1, column 3):
unexpected "c"
expecting "b" or "a"
Prelude Text.Parsec Text.Parsec.String> parseTest ((,) <$> lookAhead (char 'a') <*> getInput) "ab"
('a',"ab")
Prelude Text.Parsec Text.Parsec.String> parseTest (lookAhead (char 'a')) "ba"
parse error at (line 1, column 1):
unexpected "b"
expecting "a"
Prelude Text.Parsec Text.Parsec.String> parseTest anyToken "ab"
'a'
eofkhớp với vị trí kết thúc của input.notFollowedBy pchỉ thành công khi parser p thất bại.manyTill p endkhớp không hoặc nhiều lần parser p cho đến khi khớp end thành công. Trả về danh sách các p.lookAhead pcố gắng khớp parser p nhưng không tiêu thụ input.anyTokenkhớp với bất kỳ token nào.
Tài liệu Tham khảo
Intro to Parsing with Parsec in Haskell