当前位置:汽车观察网 > 用车

这个星期,项目中要使用C++或C语言解析JSON格式的数据,把解析的结果放到一个通用的数据结构。这个通用的数据结构,实际上是作为web服务层(这一层大家可以认为是类似于PHP服务器或webpy的服务器容器)到web页面层(这一层是语法类似PHP脚本或者tornardo模板)的数据传输的协议。 之所以要这样处理, 主要是因为这个web类的项目(一般的web类项目也是如此)需求变化较快,而web的服务层使用是采用C++进行开发的,为了使当web服务层的数据格式变化不影响web页面层,所以双方使用统一的通用的数据结构。而之所以交代这么多的背景是, 为了让大家了解为什么我们不使用类似rapidjson或jsoncpp来实现json的解析而需要手写解析器。 因为使用类似rapidJson或者是jsoncpp之类的Json解析器,相当于我们要做:

JSON文档 -> json DOM -> 通用数据结构。

而如果手写解析器,只需要做:

JSON文档 -> 通用数据结构。

少一层转换能换来很多效率的提升。

说了这么多,下面开始进入正题。 以前学编译原理的时候,老师推荐过LEX /YACC来写编译器,其实这是古老的UNIX软件。 LINUX上有他们的GNU版本 FLEX、BISON。 这两个东西一个是词法分析器,一个是语法分析器。词法分析器的作用是把字符解析成单词。一般的把单词称为token, 而语法分析器则是把单词解析成语法树。

汽车观察网®. ALL RIGHTS RESERVED. 豫ICP备2023027397号