[心得]应用编译原理知识解决问题

本文探讨了在C++或C项目中,为优化JSON数据解析效率,选择手动编写解析器而非使用现成库的方法。通过直接将JSON转换为通用数据结构,减少了一层DOM转换,提升了性能。介绍了词法分析器flex和语法分析器bison的使用,并提供了简单的四则运算处理示例。作者还承诺在未来补充关于编译原理的深入学习心得。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景
项目中要使用C++或C语言解析JSON格式的数据,把解析的结果放到一个通用的数据结构。作为web服务层(这一层大家可以认为是类似于PHP服务器或webpy的服务器容器)到web页面层(这一层是语法类似PHP脚本或者tornardo模板)的数据传输的协议。如果使用类似rapidJson或者是jsoncpp之类的Json解析器,相当于我们要做:
JSON文档 -> json DOM -> 通用数据结构。

而如果手写解析器,只需要做:
JSON文档 -> 通用数据结构。

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

解释一下什么是DOM,这是Data Object Model的缩写。
注意Lex/Yacc已经被flex和bison取代了。

词法分析器flex:把字符解析成token;
语法分析器bison:把token解析成语法树。

甜点
先看看flex+bison组合如何处理4则计算。
此例子来自flex和bison的入门教程,写得很好。

flex一般用.l作后缀。例如calc.l。它标准格式是3段。第1段写注释以及包含预处理头文件,第2段描述解析token的规则,第3段实现具体处理代码;

%{
#define YYSTYPE double
#include "calc.tab.h"
#ifdef CALC_LEX
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值