Antlr Json解析过程——Json解析器的诞生(1) - xcr1234/json GitHub Wiki
JsonParser的诞生————基于antlr框架
版权所有 转载请注明来源!
学过《编译原理》的童鞋应该清楚,程序的编译需要经过词法、语法、语义等一系列复杂的分析。JSON作为一种典型的上下文无关文法,一些传统的JSON解析器是可以通过逐个字符地去解析的。这样做的确能实现结果,同时时间复杂度较短(o(strlen))。但是随着计算机内存和CPU硬件性能的不断提升,这些处理已经不再是性能瓶颈了。因此,设计一个JSON解析器除了要求高效率以外,还必须有可扩展性,能够处理不同的需求。因此,我将JSON视为一种“编译语言”,设计其lexer以及对应的解释器parser、执行器。
虽然说在Java中实现一个语言的lexer和parser是很困难的,但antlr框架提供了一个非常简单的方式。只用按照antlr规定的格式(.g4
格式)写一个“脚本”文件,就可以自动生成对应的lexer类(对应本项目中的com.xson.lexer.JSONLexer
)和parser类(对应本项目中的com.xson.lexer.JSONParser
),这个lexer类和parser类的内容不是我们需要关心的,我们只用关心语法细节,而不用关心字符串处理程序的实现,g4的书写方式有点类似于正则表达式,但功能比正则要高级。
关于g4的具体细节在《The Definitive ANTLR 4 Reference》一书中已经说明的非常清楚了,这里不再赘述。