Parsing 解析器何时追加其输入字符串?
给定一个解析器Parsing 解析器何时追加其输入字符串?,parsing,haskell,grammar,Parsing,Haskell,Grammar,给定一个解析器 newtype Parser a = Parser { parse :: String -> [(a,String)] } (>>=) :: Parser a -> (a -> Parser b) -> Parser b p >>= f = Parser $ \s -> concat [ parse (f a) s' | (a, s') <- parse p s ] return :: a -> Parser
newtype Parser a = Parser { parse :: String -> [(a,String)] }
(>>=) :: Parser a -> (a -> Parser b) -> Parser b
p >>= f = Parser $ \s -> concat [ parse (f a) s' | (a, s') <- parse p s ]
return :: a -> Parser a
return a = Parser (\s -> [(a,s)])
item :: Parser Char
item = Parser $ \s -> case cs of
"" -> []
(c:cs) -> [(c,cs)]
newtype解析器a=解析器{parse::String->[(a,String)]}
(>>=)::解析器a->(a->解析器b)->解析器b
p>>=f=Parser$\s->concat[parse(fa)s'|(a,s')Parser a
返回a=Parser(\s->[(a,s)])
项::解析器字符
item=Parser$\s->case of cs
"" -> []
(c:cs)->[(c,cs)]
我们可以看到,项
消耗了给定给它的部分输入字符串(“abc”->[('a',“bc”)]
)。是否有解析器生成额外字符串输出或替换/修改它的情况(例如,解析器$\s->[((),'a':s)]
)?我怀疑上下文敏感语法可能就是这种情况,但很难想出一个合理的例子
对于现实世界中的问题,这样做有意义吗
工具书类