解析器组合子:从零开始构建一个JSON解析器
1. 解析器基础知识
解析器是一种程序,它接受非结构化数据(例如文本、符号、数字或令牌流)作为输入,并输出该数据的结构化表示。例如,我们可以编写一个解析器将逗号分隔的文件转换为列表的列表,或者将XML或JSON文档转换为类似树的数据结构。
在本章中,我们将通过设计一个用于创建解析器的组合子库来工作。我们将使用JSON解析作为激励性用例,这不仅涵盖了解析器的基础知识,还深入探讨了如何通过组合简单的基本解析器来构建更复杂的解析器。我们将采用“代数设计”的方法论,即先设计接口及相关的法则,再依据这些指导原则选择合适的数据类型表示。
1.1 什么是解析器组合子?
解析器组合子是一种函数式编程技术,它允许我们通过组合简单的基本解析器来构建更复杂的解析器。解析器组合子库通常提供一组原语(如 char , string , regex 等)和组合子(如 map , flatMap , or 等),这些原语和组合子可以用来创建更复杂的解析器。
1.2 代数设计方法论
代数设计方法论是一种编写组合子库的方法,它强调首先设计接口和相关法则,然后再用这些接口和法则来指导数据类型表示的选择。这种方法论有助于我们从具体实现的束缚中解放出来,专注于问题的本质。
1.3 示例:解析简单字符
让我们从最简单的解析器开始:一个能识别单一字符输入’a’的解析器。我们可以为这个任务发明
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



