Parsing 用Parsec解析复杂文件
我想用Haskell解析具有多个数据序列(相同列数、相同内容等)的文件。 我的数据序列将由前后的关键字分隔Parsing 用Parsec解析复杂文件,parsing,haskell,parsec,happy,alex,Parsing,Haskell,Parsec,Happy,Alex,我想用Haskell解析具有多个数据序列(相同列数、相同内容等)的文件。 我的数据序列将由前后的关键字分隔 BEGIN 1 882 2 809 3 435 4 197 5 229 6 425 ... END BEGIN 1 235 623 684 2 871 699 557 3 918 686 49 4 53 564 906 5 246 344 501 6 929 138 474 ... END 我的问题是,在使用Parsec进行了几次测试之
BEGIN
1 882
2 809
3 435
4 197
5 229
6 425
...
END
BEGIN
1 235 623 684
2 871 699 557
3 918 686 49
4 53 564 906
5 246 344 501
6 929 138 474
...
END
我的问题是,在使用Parsec进行了几次测试之后,我的印象是Parsec更倾向于逐行解析一个文件,而不是整个文件
是<强> PARSEC> <强>是我想要的正确方式还是应该考虑其他工具如<强>快乐< /强>或<强>亚历克斯< /强>
是否有网站(或其他ressource)提供使用Parsec解析复杂文本文件的示例注:我给出的示例非常简单。在我的文件中,如果有更多的关键字和组合,事情会变得更加棘手。您描述的格式在parsec中处理起来一点也不难
至于学习如何使用它:您的第一步应该是避免任何指南给您的印象,即parsec逐行工作。我建议您从这里开始学习,一旦您熟悉了基础知识,这里的参考资料实际上就非常清楚了。Parsec对于您是否逐行解析是完全不可知的。您的数据格式非常容易在Parsec中实现,它是一种工业级解析器,专为编程语言设计(语法比您的示例复杂得多!),类似于
parseBlock=between(string“BEGIN\n”)(string“END\n”)$sebby(char'\n')parseSingleLine
(其中,parseSingleLine
解析一行数据)会起作用。Parsec是“逐行”的,它应该很容易处理这个问题。@BenjaminHodgson我想你的意思是Sebby parseSingleLine(char'\n')
@JeanJoux编辑你的问题并指定你想要用作结果的数据类型您的示例中的解析器。