如何用flex+bison写语法分析器

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/14 12:32:47
如何用flex+bison写语法分析器

如何用flex+bison写语法分析器
如何用flex+bison写语法分析器

如何用flex+bison写语法分析器
这个星期,项目中要使用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, 而语法分析器则是把单词解析成语法树.