Antlr Json解析过程——Json解析器的诞生(2) - xcr1234/json GitHub Wiki
版权所有,转载请注明来源!
Antlr的解析过程
为了简单起见,我们将解析分为两个阶段,对应我们的大脑读取文字时的过程。当我们读到一个句子时,在第一阶段,大脑会下意识地将字符组成单词,然后像查词典一样识别出它们的意思。在第二阶段,大脑会根据已识别的单词去识别句子的结构。第一阶段的过程叫词法分析**(lexical analysis)**,对应的分析程序叫做_lexer_,负责将符号(token)分组成符号类(token class or token type)。而第二阶段就是真正的_parser_,默认ANTLR会构建出一棵分析树(parse tree)或叫语法树(syntax tree)。
Antlr为我们将字符串解析为语法树,我们所有的操作都是基于这个语法树上的。它提供了两种方式遍历访问这个语法树,一种是使用自带的ParseTreeWalker(深度优先)配合用于回调的Listener,另一种是使用自定义的Visitor(Walker)来进行遍历。
JSON的解析过程
在解析JSON时,由于是上下文无关文法,故采用第一种方式以回调的listener进行遍历。
核心类:
com.xson.parser.JsonObjectListener
com.xson.parser.JsonArrayListener
JsonArrayListener
是继承JsonObjectListener
的,具体的大家可以看JsonObjectListener的源码。
注:ParseTreeProperty
其实就是一个HashMap
,不过antlr官方推荐使用这个类。