【问题标题】:What is the best way to reuse the Lua parser?重用 Lua 解析器的最佳方法是什么?
【发布时间】:2011-12-31 17:36:34
【问题描述】:

我知道如何在其他语言中嵌入 Lua,但我想仅重新使用解析器来解析代码并将结果作为 AST 给我。使用 Lua 平台最简单的方法是什么?

谢谢!

【问题讨论】:

  • lua 解析器不生成 AST - 源代码一次性从文本到字节码
  • 这是否意味着我想要的不可能?解析器不能重用?
  • 你想用 AST 做什么?
  • @SethCarnegie:重用词法分析器可能仍然足以生成程序结构的描述。然后,OP 可以从中构造一个 AST。
  • @IraBaxter:“为什么它不能被掏空和弯曲来生产呢?”谁说不能?这并不意味着这将是一个特别富有成果的过程,或者使用任意数量的可用工具将语法翻译成解析器不会更快?不像 Lua 有复杂的语法规则或任何东西。

标签: c++ c parsing programming-languages lua


【解决方案1】:

有人已经为 Lua 语言编写了 ANTLR 语法:

http://www.antlr3.org/grammar/1178608849736/Lua.g

或者,如果您使用的是 ANTLR v4:

https://github.com/antlr/grammars-v4/blob/master/lua/Lua.g4

我在几个项目中使用了 ANTLR,效果很好。如果您要求,它将生成一个 C (ANTLR v3) 或 C++ (ANTLR v2) 解析器,包括 AST 生成。

【讨论】:

  • 为什么 v2 生成 C++ 而 v3 生成 C?
  • 还有一个有趣的问题。 v2 有几个目标,包括 C++、Java 和 C#。 v3 支持 C、Java、C#、Python 和 Objective C。虽然他们添加 Python 和 Objective C 的原因可能很明显,但他们放弃 C++ 的原因尚不清楚。一位 ANTLR 维护人员多次表示他会为 ANTLR v3 编写 C++ 目标,但从未这样做过。也许其他人没有尝试过,因为 cookie 是湿的 (blogs.msdn.com/b/oldnewthing/archive/2009/12/01/9930480.aspx)。 v2 中的 C++ 目标是如何从 v3 中“消失”的?那是因为他们重新设计了目标 API,以便更轻松地添加语言。
  • @PhoenixX_2:我已经更新了链接。 ANTLR 的人似乎在不久前破坏了他们网站上的许多链接。
猜你喜欢
  • 2019-09-16
  • 1970-01-01
  • 2010-09-14
  • 2020-06-28
  • 2012-07-28
  • 1970-01-01
  • 1970-01-01
  • 2011-01-31
  • 2010-10-28
相关资源
最近更新 更多