这周的 Cassidoo 的每周简讯有这么一个面试题::

写一个函数,这个函数接收一个正确的 JSON 字符串并将其转化为一个对象(或字典,映射等,这取决于你选择的语言)。示例输入:

fakeParseJSON('{ "data": { "fish": "cake", "array": [1,2,3], "children": [ { "something": "else" }, { "candy": "cane" }, { "sponge": "bob" } ] } } ')

当时,我想这么写:

const fakeParseJSON = JSON.parse;

但是,我想起之前写了一些关于AST的文章,

其中涵盖了编译器管道的概述以及如何操作AST,但是我没有过多介绍如何实现解析器。因为实现JavaScript编译器对我来说是一项艰巨的任务。

那就没必要担心。 JSON也是一种语言,有自己的语法,可以参考规范。 根据编写JSON解析器所需的知识和技术转移到编写JS解析器中。

好了,那就开始编写一个JSON解析器吧。

语法

查看规范文档页面,可以看到以下两个图。

json
element value
object
array
string
number
"true"
"false"
"null" object
'{' ws '}'
'{' members '}'

两个图其实是等价的。

一个基于视觉,一个基于文本。基于文本语法的语法 —— 巴科斯-诺尔范式,通常被提供给另一个解析这种语法并为其生成解析器的解析器,终于说到解析器了!

最新文章

  1. win10 64位安装memcache扩展和开启redis扩展
  2. 原生js拖拽
  3. 编写高性能SQL
  4. 如何很好的Review自己的代码
  5. 布局 position
  6. 在HTML文件的表单中添加{%csrf_token%}便可以解决问题
  7. ofbiz进击 第六节。 --OFBiz配置之[widget.properties] 配置属性的分析
  8. windows防火墙添加规则
  9. poj 3981 字符串替换
  10. notepad 如何同时选中同一列的数据 Alt
  11. hadoop各版本下载
  12. static和extern关键字 对变量的作用
  13. VBA 开发学习--基础语法
  14. Goodle Clean设计架构
  15. Objective-C MapKit的使用-LBS简单的租车主界面demo
  16. python 实现三级菜单
  17. 阿里云学习之API网关
  18. 关于vue-axios的url地址统一设置
  19. 使用 C# (.NET Core) 实现模板方法模式 (Template Method Pattern)
  20. Python题集:2019春Python程序设计选修课习题笔记

热门文章

  1. C++ 排序引用的优化
  2. lvs+keepalived部署k8s v1.16.4高可用集群
  3. 关于爬虫的日常复习(13)—— 爬虫requests的初级高级的基本用法
  4. javaweb-codereview 学习记录-2
  5. 20200102模拟赛 问题A 排列
  6. 团队项目——Alpha发布2
  7. linux系统CentOS7中find命令使用
  8. java刷题(1-5)
  9. Struts(五)
  10. Hadoop-3.1.2安装步骤