精读《syntax-parser 源码》

2019-03-04
阅读 10 分钟
2.6k
1. 引言 syntax-parser 是一个 JS 版语法解析器生成器,具有分词、语法树解析的能力。 通过两个例子介绍它的功能。 第一个例子是创建一个词法解析器 myLexer: {代码...} 如上,通过正则分别匹配了 “空格”、“字母或数字”、“加号”,并将匹配到的空格忽略(不输出)。 分词匹配是从左到右的,优先匹配数组的第一项,依此类...

精读《手写 SQL 编译器 - 性能优化之缓存》

2018-11-05
阅读 2 分钟
4k
1 引言 重回 “手写 SQL 编辑器” 系列。这次介绍如何利用缓存优化编译器执行性能。 可以利用 Frist 集 与 Match 节点缓存 这两种方式优化。 本文会用到一些图做解释,下面介绍图形规则: First 集优化,是指在初始化时,将整体文法的 First 集找到,因此在节点匹配时,如果 Token 不存在于 First 集中,可以快速跳过这个...

精读《手写 SQL 编译器 - 语法分析》

2018-07-23
阅读 6 分钟
11.1k
自顶而下一般采用递归下降方式处理,称为 LL(k),第一个 L 是指从左到右分析,第二个 L 指从左开始推导,k 是指超前查看的数量,如果实现了回溯功能,k 就是无限大的,所以带有回溯功能的 LL(k) 几乎是最强大的。LL 系列一般分为 LL(0)、LL(1)、LL(k)、LL(∞)。

精读《手写 SQL 编译器 - 文法介绍》

2018-07-16
阅读 3 分钟
5.4k
我们将一块语法规则称为 产生式,使用 “Left → Right” 表示任意产生式,用 “Left => Right” 表示产生式的推导过程,比如对于产生式:

精读《手写 SQL 编译器 - 词法分析》

2018-07-09
阅读 2 分钟
6.7k
1 引言 因为工作关系,需要开发支持众多方言的 SQL 编辑器,所以复习了一下编译原理相关知识。 相比编译原理专家,我们只需要了解部分编译原理即可实现 SQL 编辑器,所以这是一篇写给前端的编译原理文章。 解析 SQL 可以分为如下四步: 词法分析,将 SQL 字符串拆分成包含关键词识别的字符段(Tokens)。 语法分析,利用...