如何用javascript(typescript)写一个解析组合子库(parser combinator)

2020-12-12
阅读 11 分钟
3.8k
作为前端开发人员,我们的生态圈早已充斥着各种parser工具,通过本篇文章,希望你能学习到parser combinator的实现原理,更加了解函数式编程。在有必要的时候,轻松地通过parser combinator实现自己的parser。本篇文章在实现parser combinator库后,在末尾会通过使用这个库来实现一个json parser。

语言解析之回溯法和记忆法

2020-12-12
阅读 2 分钟
2.4k
语法规则越复杂,就越需要灵活地向前看k个字符,回溯法与LL(k)相比,相当于任意多的向前看符号。能满足更多的场景和需求,但回溯法有一个最大的问题是性能相对较差,所谓的记忆法就是在回溯法的基础上,对于已经计算过的结果进行缓存,以降低回溯法的时间复杂度。

算符优先算法

2020-12-12
阅读 4 分钟
2k
通常,操作符的优先级越高,位置就越低。例如在3+45这个表达式中,*的优先级高于+,那么就是+节点的子节点。但如果3+4添加了(),即:(3+4)*5,两个符号的优先级就颠倒回来。