parboiled2:Scala 中基于宏的解析表达式文法高效生成器方法
编程语言
2019-07-09 v1 软件工程
摘要
在当今计算机化的世界中,解析无处不在。开发者解析日志、对数据库与网站的查询、编程语言与自然语言。当 Java 生态成熟度、简洁语法与运行时速度至关重要时,开发者会选择 parboiled2,其为解析表达式文法(PEG)生成文法。以下开源库已选用 parboiled2 提供解析功能:- akka-http 是 Lightbend Akka 的流式优先 HTTP 服务器/模块 - Sangria 是一个 Scala GraphQL 实现 - http4s 是一个极简、惯用的 Scala HTTP 接口 - cornichon 是用于测试 HTTP JSON API 的 Scala DSL - scala-uri 是一个用于构建与解析 URI 的简单 Scala 库该库运用广泛的 Scala 设施以提供所需功能。我们还讨论了针对 PEG 的扩展。特别地,我们展示了一个具有直观语法与语义的内部 Scala DSL 的实现。我们演示了 parboiled2 如何广泛利用 Scala 类型系统以验证 DSL 完整性。我们还展示了与 parboiled2 内部结构的关联,可使开发者更好地理解如何组合更高效的文法。最后,我们揭示了文法如何通过 Scala 宏展开为高效的运行时代码。
引用
@article{arxiv.1907.03436,
title = {parboiled2: a macro-based approach for effective generators of parsing expressions grammars in Scala},
author = {Alexander A. Myltsev},
journal= {arXiv preprint arXiv:1907.03436},
year = {2019}
}