算法与计算机科学journal.stuffwithstuff.com
Pratt 解析器:让表达式解析变简单(2011)
Pratt Parsers: Expression Parsing Made Easy (2011)
2011 — 2024,它一次次回到首页
黑点是上首页(≥ 50 分)的那次投稿,空心点是没冲上去的投稿,点越大分数越高。
导读
这是一篇介绍 Pratt 解析器(又称自顶向下运算符优先级解析)的教程,用通俗的方式讲解如何手写表达式解析器。作者通过把“前缀/中缀”解析函数与运算符的绑定力(binding power)结合,展示了这种方法的简洁与灵活。文章配有可运行的示例代码,是这一主题流传最广的入门材料之一。
为什么经久不衰:它把看似高深的表达式解析讲得直观可操作,代码短小、思路清晰,十多年来一直是手写解析器时最常被推荐的入门读物。
HN 评论精选
作者自荐另一篇更详细的自顶向下运算符优先级解析教程。
呃,我之前也写过一篇:http://eli.thegreenplace.net/2010/01/02/top-down-operator-precedence-parsing/(抱歉打广告,但我觉得我的教程在解释原理方面更全面。)
eliben查看英文原文
Uhm, I wrote this a while ago: http://eli.thegreenplace.net/2010/01/02/top-down-operator-precedence-parsing/ [sorry for the plug, but I think my tutorial is more comprehensive in terms of explaining how the thing actually works]
调侃解析教程总把词法分析一笔带过,正好说中读者心声。
我草草拼了个能用的词法分析器,然后就假装 token 是从天而降的。这句话完美概括了我读过的所有解析讨论和论文,我爱了。
scott_s查看英文原文
I slapped together a crude lexer that works and we’ll just pretend that tokens are raining down from heaven or something. This perfectly describes all parsing discussions and papers I've read. I love it.
用 IronJS 的实践说明手写 Pratt 解析器能显著提升性能,并给出通用实现。
我很喜欢 Pratt 解析器(或者说自顶向下运算符优先级解析器)。我最近按照这篇博客的方法,把 IronJS 的词法分析器和解析器从 ANTLR 生成版本改成手写,性能提升相当可观。另外我还有一个几乎能接受任意输入输出的通用版本(F#):https://github.com/fholm/Vaughan
fholm查看英文原文
I love Pratt parsers (or Top Down Operator Precedence parsers rather), I recently re-wrote the IronJS lexer and parser by hand (from using one generated by ANTLR) using the techniques described in this blog post and saw some pretty hefty performance increments http://ironjs.wordpress.com/2011/03/19/new-lexer-and-parser-in-ironjs/ Edit, I also have a generalized version that can take pretty much any input and any output (F#) here: https://github.com/fholm/Vaughan
认可文章质量,认为方法可能直接用于自己的项目。
一篇讲……编程的文章?这可不是我认识的 HN!好文。我得再琢磨琢磨,不过它可能正好适用于我手上的某个项目。
cletus查看英文原文
A post about... Programming? This isn't the HN I know! Good post. I need to ruminate on this some more but it might well apply to something I'm working on.
历次讨论
同类还值得读
位运算技巧集
Bit Twiddling Hacks
斯坦福页面上的经典位运算技巧合集,收录了 popcount、前导/尾随零、位反转、交换、舍入等大量技巧,并附有解释和性能讨论。
算法与计算机科学上首页 8 次 · 2011–2024graphics.stanford.edu编辑精选如何不按平均评分排序
How Not To Sort By Average Rating
经典文章解释了为什么按平均评分排序不可靠:只有少量评价的条目(比如仅一条五星)会轻易排到最前,而评价数量的差异被忽略。
算法与计算机科学上首页 7 次 · 2009–2024evanmiller.org编辑精选数据结构可视化
Data Structure Visualizations
旧金山大学 David Galles 教授制作的数据结构与算法交互式可视化网站,涵盖 B 树、红黑树、排序、图算法等,可逐步操作观察其运行过程。
算法与计算机科学上首页 6 次 · 2011–2021cs.usfca.edu编辑精选1996 年以来的计算机科学最佳论文奖
Best Paper Awards in Computer Science since 1996
Jeff Huang 维护的一个汇总页面,收录了自 1996 年以来计算机科学各主要会议的“最佳论文奖”获奖名单,并按年份和会议整理,方便读者一站式浏览历届获奖论文。
算法与计算机科学上首页 6 次 · 2010–2018jeffhuang.com编辑精选算法(Jeff Erickson)
Algorithms, by Jeff Erickson
伊利诺伊大学 Jeff Erickson 教授的算法课教材,免费在线开放。
算法与计算机科学上首页 5 次 · 2018–2022jeffe.cs.illinois.edu编辑精选