← 最新论文
💻 computer science

An Empirical Comparison of General Context-Free Parsers

本文展示了首个对使用 Rust 实现的六种通用上下文无关解析算法进行的统一基准测试,证明了 GLR 系列通过仅产生较 LR(1) 确定性解析器 3 倍的中位数性能开销,即可在支持完整语言表达能力的同时,成为软件工程工具中一个实用的默认选择。

原作者: Huan Vo, Danushka Liyanage, Hong Jin Kang, Sasha Rubin, Rahul Gopinath

发布于 2026-06-09
📖 1 分钟阅读☕ 轻松阅读

原作者: Huan Vo, Danushka Liyanage, Hong Jin Kang, Sasha Rubin, Rahul Gopinath

原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明

想象一下你是一名试图将一种外语(源代码)转换成计算机能够理解的形式的翻译员。这个过程被称为解析(parsing)

几十年来,软件工程师使用的翻译员就像是刻板、受规则束缚的机器人。它们速度极快,但也非常挑剔。如果你给出的语言哪怕只有一点点歧义或复杂的句子结构,机器人就会拒绝工作。为了让机器人开心,工程师们不得不花费数小时去“黑入(hacking)”这种语言——重写句子、移除自然结构,并扭曲语法,仅仅是为了去适应机器人狭隘的规则。这就像是因为你手里只有一个正方形的木桩,就非要把圆形的木桩硬塞进方孔里一样。

正因如此,许多工程师放弃了使用这些正式的机器人,转而开始亲手构建自己的翻译员。这些手工构建的翻译员通常漏洞百出、难以维护且不安全。

核心问题
多年来,一直存在一种观点,认为“通用型(General)”解析器——即能够处理任何语言结构而无需进行“黑入”处理的翻译器——由于太慢而无法投入使用。人们认为它们就像是相对于快速、严格的机器人而言,笨拙缓慢的巨人。

这篇论文的作者决定解决这场争论。他们建立了一个“赛道”,用以测试六种不同类型的这些“通用型”解析器与旧有的“严格型”机器人的对决。他们确保每一位赛车手都穿着同样的鞋子、跑在同样的赛道上,并使用同一个秒表(他们用相同的语言 Rust 编写了所有代码,并使用了相同的工具)。

参赛者
他们测试了六种不同的策略:

  1. 矩阵移动者(CYK & Valiant): 它们试图通过填满一个巨大的网格来解开谜题。
  2. 自顶向下探索者(Earley & GLL): 它们试图从上往下猜测结构,同时探索多条路径。
  3. 自底向上构建者(RNGLR & BRNGLR): 它们从底层向上构建结构,通过将注意力同时分散到多条路径上来处理冲突。
  4. 严格机器人(LL(1) & LR(1)): 这些是老派的、快速但挑剔的解析器。

结果:惊喜的赢家

  • “笨拙的巨人”(CYK & Valiant): 它们表现得非常糟糕。它们太慢了,以至于在实际任务中几乎毫无用处。它们就像是试图开着坦克穿梭在城市街道中;它们根本行不通。
  • “自顶向下探索者”(Earley & GLL):
    • Earley 是其中最慢的一个。
    • GLL 在某些语言上很快,但在处理其他语言时会变得非常缓慢且极其耗费内存。它就像是一个在直道上表现出色,但在弯道上却会被自己的脚绊倒的跑步者。
  • “自底向上构建者”(RNGLR & BRNGLR): 它们是冠军。
    • 它们是所有“通用型”解析器中最快的。
    • 它们的内存效率极高,使用的内存量几乎与严格型机器人一样少。
    • 重大揭秘: 当语言本身足够简单,足以适配严格型机器人时,这些新的“通用型”解析器仅比它们慢了 3 倍。作者认为,为了获得能够处理任何语言而无需进行“黑入”的能力,付出 3 倍速的代价是一个微不足道的代价。

“语法黑入”陷阱
论文还研究了当你试图通过“黑入”语言来使其适配严格型机器人时会发生什么。

  • 速度: 是的,通过黑入语言来适配严格型机器人确实能让速度提升 4 到 7 倍。
  • 代价: 但是,黑入语言往往会让它变成新一代“通用型”解析器最糟糕的场景。这就像是为了让你最喜欢的选手获胜而改变比赛规则,却不小心让整场比赛变得无法进行。
  • 结论: 作者表示,你不应该为了榨取一点额外的速度而对你的语言进行“黑入”。“通用型”解析器对于几乎所有情况都足够快,而且“黑入”语言会让代码更难阅读和维护。

简单的总结
长期以来,软件工程师认为他们必须在速度(使用严格的、经过“黑入”处理的解析器)和灵活性(使用缓慢的、通用的解析器)之间做出选择。

这篇论文证明,这种选择其实是一个伪命题。新型的“通用型”解析器(特别是 GLR 系列)已经足够快,可以作为默认选择。它们就像是一个万能适配器:它们几乎能适配任何插头,虽然它们可能比特定适配器稍微重一点,但它们让你免去了为每一种设备都购买一个不同适配器的麻烦。

简而言之: 停止为了适配那些古老、挑剔的解析器而去“黑入”你的语言。使用这些新的、灵活的“通用型”解析器吧。它们速度够快,占用内存少,并且能让你按照语言自然的形态去编写它们。

您所在领域的论文太多了?

获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。

试用 Digest →