代码之家  ›  专栏  ›  技术社区  ›  jjmerelo

从另一个程序获取perl 6文件的qast

  •  4
  • jjmerelo  · 技术社区  · 7 年前

    这与 this question on accesing the POD 但比这更进一步。你可以 easily access the Abstract Syntax Tree of a Perl 6 program 使用:

    perl6 --target=ast -e '"Þor is mighty!".say'
    

    这将打印整个Q抽象语法树。如何从你自己的程序中实现这一点还不太清楚,或者我还没有找到如何做到。事实上, the CoreHackers::Q module 将其作为外部脚本运行。但是能够从你自己的程序访问它,比如

    use QAST; # It does not exist
    my $this-qast = QAST::Load("some-external-file.p6") # Would want something like this
    

    会很棒的。我非常肯定它应该是可能的,在核质量计划的水平上,可能以一个拉库多依赖的方式。有人知道热吗?

    1 回复  |  直到 7 年前
        1
  •  6
  •   Jonathan Worthington    7 年前

    由于Qast不是Perl6语言规范的一部分,而是Rakudo的内部实现细节,因此没有正式的方法可以做到这一点。最终会有一个AST表单,它是语言规范的一部分,但还不存在 007 正在探索该地区的项目)。

    但是,可以使用以下方法获得QAST树:

    use nqp;
    my $ast = nqp::getcomp("perl6").eval("say 42", :target<ast>);
    say $ast.dump();
    
    推荐文章