- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在模块 Text.ParserCombinators.ReadP
, munch
(和 munch1
)文档说:
Parses the first zero or more characters satisfying the predicate. Always succeds, exactly once having consumed all the characters Hence NOT the same as
(many (satisfy p))
.
最佳答案
首先,让我们找到一个反例,让我们使用 Haskell 工具自动完成。 QuickCheck图书馆可以很快地给我们这样一个反例:
import Data.Function (on)
import Text.ParserCombinators.ReadP
import Test.QuickCheck
prop_ParseTest :: String -> Property
prop_ParseTest input = on (===) runParser (munch pred) (many (satisfy pred))
where
runParser :: ReadP a -> [(a, String)]
runParser = flip readP_to_S input -- run a given parser on a given input
pred :: Char -> Bool
pred = (> 'A')
main :: IO ()
main = quickCheck prop_ParseTest
much pred
和
many (satisfy pred)
是相同的。 QuickCheck 立即发现它们不同,并尝试生成尽可能短的反例:
*** Failed! Falsifiable (after 5 tests and 2 shrinks):
[("a","")] /= [("","a"),("a","")]
munch pred
总是消耗
'a'
无条件地,而
many (satisfy pred)
给出一个不确定的答案 - 它可能会或可能不会消耗
'a'
.
"abcd"
运行以下两个解析器。 :
test1 = munch (> 'A') >> string "cd"
test2 = many (satisfy (> 'A')) >> string "cd"
munch
消耗整个字符串,然后无法匹配
"cd"
.第二个成功了,因为
many (satisfy ...)
创建所有可能的分支
[("","abcd"),("a","bcd"),("ab","cd"),("abc","d"),("abcd","")]
string "cd"
在消耗
"ab"
的分支上成功.
关于parsing - munch 和 many(满足 p)的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26379582/
我正在使用 openstack 着色库来管理我们的 openstack 堆栈。一项任务是列出用户拥有的所有堆栈(例如,然后允许删除它们)。 着色库调用 list_stacks() 返回 munch.M
许多编程语言的语法要求根据 "maximal munch" 对其进行标记化原则。也就是说, token 是根据输入流中尽可能多的字符构建的。 PLY 的词法分析器似乎没有应用这个原则。例如: impo
cfront 包中的 munch 库(或程序?)是什么?是做什么用的? 最佳答案 Munch 用于扫描 nm 输出并查找静态构造函数/析构函数。 参见 code (带评论)在 SoftwarePres
在模块 Text.ParserCombinators.ReadP , munch (和 munch1 )文档说: Parses the first zero or more characters sa
我是一名优秀的程序员,十分优秀!