【问题标题】:How to construct AST of Hy lang snippets如何构建 Hy lang 片段的 AST
【发布时间】:2020-10-23 16:09:08
【问题描述】:

我在我的 python 项目中使用了几个 Hy Lang 代码 sn-ps。 我想知道是否有一种相对简单的方法可以让我使用一些 python 库或什至 Hy 编译器本身来获取 Hy 代码的抽象语法树(我已经查看了编译器代码,但我很难理解它)。

我知道 Hy 在生成该字节码之前会将所有 Hy lang 代码转换为 python AST 并且 looking at the compiler 我没有看到可以帮助我将 Hy 代码转换为 Hy 对象的函数,我可以将其提供给 HyASTCompiler例子。

我希望我可以利用已经构建的东西,而不必使用像 ANTLER 这样的东西并编写自己的语法。

谢谢!

使用 Hy 版本 0.12 和 python3

【问题讨论】:

    标签: python parsing compiler-construction abstract-syntax-tree hy


    【解决方案1】:

    我不清楚你是想要 Python ast 对象还是只是 Hy 代码作为数据。后者由readread-str 提供。对于前者,目前没有提供公共接口,但是看一下内部函数hy.compiler.hy_compile的docstring。

    不过,Hy 0.12 已经过时了,因此您可能需要升级。

    【讨论】:

    • 我更喜欢 python AST 对象(因为我需要“提出问题”)。我现在正在查看“hy_compile”,但这需要一个 Hy AST 对象进行编译。我什至还没有 Hy AST,我只有想要转换为 Hy AST 的 Hy 代码。我认为也许 'hy_parse' 会这样做,但我认为不存在(或在 0.12 版中工作相同)我目前正在查看最新版本的 Hy 源代码。
    • @Kenny “Hy AST”对象就是手册中所说的 Hy 模型。使用readread-str 从字符串中生成一个。
    • 我明白了,谢谢你提供的信息。如果我需要更多信息,我会尝试。现在我还找到了 hy2py 函数(哈哈,我实际上也看到了你的一些帖子@kodiologist),我认为如果与“--with-ast”标志一起使用,它可以为我提供所需的一切。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多