我想解析几个缩进或格式化为数组的命令列表Parsec
。例如,我的列表格式如下:
Command1 arg1 arg2 Command1 arg1 arg2 Command1 arg1 arg2
Command2 arg1 Command3 arg1 arg2 arg3
Command3 arg1 arg2 arg3
Command4
Command3 arg1 arg2 arg3 Command2 arg1
Command4
Command4
Command5 arg1 Command2 arg1
这些命令应该通过解析器中的状态更改逐列解析。
我的想法是将命令收集到单独的字符串列表中,并将这些字符串解析为子解析器(在主解析器内执行)。
我检查了 Parsec 库的 API,但没有找到执行此操作的函数。
我考虑过使用runParser
,但这个函数只提取解析器的结果,而不是它的状态。
我还考虑制作一个受启发的函数runParsecT
并mkPT
制作我自己的解析器,但构造函数ParsecT
或initialPos
不可用(不由库导出)
是否可以在解析器中运行子解析器Parsec
?
如果没有,像megaparsec这样的库可以解决我的问题吗?