繁体   English   中英

Haskell命令系统解析器

[英]Haskell command system parser

我已经编写了从命令行[ps auxww | ./myparser]并解析ps命令的输出,以便将其插入到我创建的过程数据结构中。 我成功解析了结果String的一行,但是现在我陷入了试图解析整个字符串并返回[Process]而不是单个Process的困境。 问题是如何实现parsePS。 它必须多次调用myParser才能解析每一行并返回Process列表并将其打印到终端中。 有人能帮我吗?

我不确定是什么让您失望,但我想间隔会杀死您。 如果是这样,我有两个想法可能会有所帮助。

修改myParser以在末尾占用空间,并且many combinator应该起作用。

myParser = do
  ...
  spaces
  command <- pCommand
  spaces -- CONSUME END OF LINE
  return Entry{ ... }

然后, many myParser应该工作。

或者,您可以先将输入分成几行,然后分别对它们进行解析。

  argLines <- fmap lines getContents

(我认为您的意思是在hGetContents之前通过getLine刻录第一行?)

在我看来,您正在寻找一种顺序解析每一行并返回解析结果列表的方法。 前奏中的mapM怎么样?

如果是myParser :: String -> Parser Process ,则mapM myParser :: [String] -> Parser [Process]似乎就是您要寻找的内容(对Parsec的Parser类型使用通用名称)。 因此,如果您有要顺序解析的行列表(称为lns ),则可以使用parse (mapM myParser) lns获得所需的内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM