Lan*_*o-L 4 parsing haskell parsec
我正在使用 Parsec 为日志文件编写解析器。该日志文件的每一行都遵循通用结构,A:B:C:D其中组件 A、B、C 和 D 遵循简单的规则。我已经为每个组件编写了解析器,我想将它们组合成一个解析器。我目前的方法有效,但我觉得必须有更好的解决方案。一个直接的缺点是,对于包含超过 4 个组件的日志文件,它无法很好地扩展。
parser :: (a -> b -> c -> d -> e) -> Parser a -> Parser b -> Parser c -> Parser d -> Parser e
parser f pa pb pc pd = f <$> pa <* (char ':') <*> pb <* (char ':') <*> pc <* (char ':') <*> pd
Run Code Online (Sandbox Code Playgroud)
我搜索了合适的解析器组合器,但唯一接近的组合器是sepBy,它不适用于此用例。任何帮助表示赞赏!
我认为最好的选择是引入自己的运营商,例如:
infixl 4 <:>
p <:> q = p <* char ':' <*> q
Run Code Online (Sandbox Code Playgroud)
那么你不需要定义单独的parse函数,编写实现也同样容易:
myParser = f <$> pa <:> pb <:> pc <:> pd
Run Code Online (Sandbox Code Playgroud)
这很容易扩展:
myParser2 = g <$> pa <:> pb <:> pc <:> pd <:> pe
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
112 次 |
| 最近记录: |