Haskell语言学习笔记(43)Parsec(2)
来源:互联网 发布:php与thinkphp 编辑:程序博客网 时间:2024/05/21 15:00
组合子 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"NothingPrelude 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 inputexpecting "ab"
- count n p 匹配 p 指定(n)次数
- between open close p依次匹配 open p close,但是只返回 p。
- option x p 尝试匹配 p,失败时返回 x。
- optionMaybe p 尝试匹配 p,失败时返回 Nothing,成功时返回 Just p。
- optional p 尝试匹配 p,失败时不消耗输入。输入不够时出错。不出错时返回空。
- (,)
组合子 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 inputexpecting "a"Prelude Text.Parsec Text.Parsec.String> parseTest (sepBy1 (char 'a') (char ',')) ""parse error at (line 1, column 1):unexpected end of inputexpecting "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 inputexpecting ","Prelude Text.Parsec Text.Parsec.String> parseTest (endBy1 (char 'a') (char ',')) ""parse error at (line 1, column 1):unexpected end of inputexpecting "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 inputexpecting "a"
- skipMany1 p 尝试匹配并跳过 p 1次或多次,返回空。
- sepBy p sep 尝试匹配0次或多次以 sep 分隔的 p 的序列(只能以 p 结尾),返回 p 的 list。
sepBy1 p sep 是1次以上的版本。 - endBy p sep 尝试匹配0次或多次以 sep 分隔的 p 的序列(只能以 sep 结尾),返回 p 的 list。
endBy1 p sep 是1次以上的版本。 - sepEndBy p sep 尝试匹配0次或多次以 sep 分隔的 p 的序列(p 或 sep 结尾均可),返回 p 的 list。
sepEndBy1 p sep 是1次以上的版本。
组合子 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 inputPrelude 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'
- eof 匹配结尾
- notFollowedBy p 仅当 p 匹配失败时成功。
- manyTill p end 匹配0次或多次 p,直到匹配 end 成功。返回 p 的 list。
- lookAhead p 尝试匹配 p,但是不消耗输入。
- anyToken 匹配任何一个 token。
参考链接
Intro to Parsing with Parsec in Haskell
阅读全文
0 0
- Haskell语言学习笔记(43)Parsec(2)
- Haskell语言学习笔记(41)Parsec(1)
- Haskell语言学习笔记(46)Parsec(3)
- Haskell语言学习笔记(2)
- Haskell语言学习笔记(1)
- Haskell语言学习笔记(4)Functor
- Haskell语言学习笔记(5)Applicative
- Haskell语言学习笔记(6)Monad
- Haskell语言学习笔记(8)Monoid
- Haskell语言学习笔记(14)Foldable
- Haskell语言学习笔记(16)Alternative
- Haskell语言学习笔记(17)MonadPlus
- Haskell语言学习笔记(18)Traversable
- Haskell语言学习笔记(21)Array
- Haskell语言学习笔记(22)MaybeT
- Haskell语言学习笔记(29)CPS
- Haskell语言学习笔记(31)ListT
- Haskell语言学习笔记(35)Contravariant
- 多线程编程
- CoverFlow效果
- 优化Android应用内存的若干方法
- TCP/IP协议分析含义与功能
- 正月初八到遵义县龙坪镇中心村舞队看龙灯
- Haskell语言学习笔记(43)Parsec(2)
- Android安卓电话拦截及短信过滤
- Android AsyncTask 详解
- AES加密示例
- android EditText获取光标位置并安插字符删除字符
- Android 常用RGB值及名称
- 关于android WebViewClient的方法解释
- WebChromeClient
- RelativeLayout用到的一些重要的属性