如何正确处理ReadP上的可选空格?

玛雅·维克多

ReadP用于解析语法时,我注意到解析器经常会呈指数形式。大多数情况下,我最终会确定问题是由的错误使用引起的skipSpaces,尽管我不确定确切的时间是什么时候发生的。用ReadP解析时处理可选空间的正确方法是什么?

埃里克

我见过的最常见的处理空格的技术是让每个令牌立即消耗紧随其后的空白。

如下所示的便捷组合器可以帮助解决此问题:

tok p = p <* spaces

例如,以下组合器定义:

adt d = Adt <$> between (string "#(") (char ')') (sepBySpaced ctor (char '|')) = ...

将被写为:

adt d = Adt <$> between (tok $ string "#(") (tok $ char ')') (sepBySpaced ctor (tok $ char '|')) = ...

唯一需要注意的是,您必须确保在输入开始时删除/跳过任何空白区域。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何正确处理python中的可选功能

来自分类Dev

如何正确处理UIButton属性和多行之间的空格

来自分类Dev

如何正确处理UIButton属性和多行之间的空格

来自分类Dev

如何在MAC OSX上正确处理.ics文件?

来自分类Dev

如何正确处理httpClient?

来自分类Dev

如何正确处理scanf()

来自分类Dev

如何正确处理并发?

来自分类Dev

如何正确处理导航

来自分类Dev

如何正确处理和打印bash中带有空格的文件

来自分类Dev

正确处理Android上的Libgdx

来自分类Dev

Flask下的fork如何正确处理?

来自分类Dev

如何正确处理Visual Studio关闭?

来自分类Dev

OCaml:如何正确处理总和类型?

来自分类Dev

如何正确处理请求承诺错误?

来自分类Dev

如何正确处理AsyncTasks的RejectedExecutionException?

来自分类Dev

AngularJS-如何正确处理承诺

来自分类Dev

如何正确处理异步并发请求?

来自分类Dev

如何正确处理SSLSocketImpl死锁?

来自分类Dev

如何正确处理标头中的异常?

来自分类Dev

如何正确处理回调堆栈

来自分类Dev

如何正确处理ThreadLocal变量?

来自分类Dev

如何正确处理异步操作?

来自分类Dev

如何正确处理python错误

来自分类Dev

如何正确处理左边距?

来自分类Dev

我如何正确处理此承诺?

来自分类Dev

Firebase函数如何正确处理错误

来自分类Dev

如何正确处理此SFINAE?

来自分类Dev

CSS堆叠顺序-如何正确处理?

来自分类Dev

AngularJS-如何正确处理承诺