ANTLR4 解析JSON
解析JSON
这次我们试着用新学的语法和词法知识来解析json。
从JSON参考手册中提取关键信息
一个典型的json文件:
我们从json的参考手册和官方语法解释得出以下:
- 一个
json文件
可以是一个对象
,或者是一个由若干值组成的数组
。 - 一个
对象
是一组无序的键值对集合
;一个对象以一个{
开始,并以一个}
结束。每个键后跟一个:
,键值对之间由,
分隔;会有空
对象情况。 键值对
是字符串
:值
的形式数组
是一组值
的有序集合;一个数组由一个[
开始,一个]
结束。其中值由,
分隔。会有空
数组情况。- 一个
值
可以是一个双引号
包围的字符串
、一个数字
、true/false
、null
、一个对象
,或者一个数组
,可能有嵌套。 - 一个
字符串
由零个或者多个
Unicode字符组成的序列,由双引号
包围;除了"
和\
以外都可以被匹配;转义字符
的匹配我们另外规定;"
不能被匹配是因为字符串变量不能嵌套字符串,但是"本身可以通过\转义显示;\
不能被匹配时因为它本身有转义的含义,我们可以通过\转义显示。 转义字符
由\开头,包含" \ / b f n r t
,以及u
+四个16进制数
。UNICODE
由u
和4个16进制数
组成。数字
有三种情况:整数 小数 指数;它们都应该考虑正负关系
;整数需要考虑只有0是0开头的,其它都是1-9开头;指数需要考虑e后是否需要正负号。
根据信息编写语法文件
我们一条一条来。
json文件
json
: object
| array
;
对象
这里我们将键值对作为pair
单独成一个文法规则,不然STRING:value
会显得很乱。