abstract-syntax-tree - 从另一个程序获取 Perl 6 文件的 QAST
问题描述
这与访问POD 的这个问题有关,但它比这更进一步。您可以使用以下命令轻松访问 Perl 6 程序的抽象语法树:
perl6 --target=ast -e '"Þor is mighty!".say'
这将打印整个 Q 抽象语法树。目前还不太清楚如何从您自己的程序中制作这个,或者我还没有找到如何做到这一点。实际上,该CoreHackers::Q
模块将其作为外部脚本运行。但是能够从您自己的程序中访问它,例如
use QAST; # It does not exist
my $this-qast = QAST::Load("some-external-file.p6") # Would want something like this
会很好。我很确定这应该是可能的,在 NQP 级别并且可能以 Rakudo 依赖的方式。有人知道它很热吗?
解决方案
由于 QAST 不是 Perl 6 语言规范的一部分,而是 Rakudo 的内部实现细节,因此没有官方的方法可以做到这一点。最终会有一种 AST 形式,它是语言规范的一部分,但目前还不存在(正在探索该领域的007项目)。
但是,可以使用以下方法获得 QAST 树:
use nqp;
my $ast = nqp::getcomp("perl6").eval("say 42", :target<ast>);
say $ast.dump();
推荐阅读
- java - 在android模拟器中安装apk时出错
- java - jersey 如何在内部处理@pathparam 注入?
- c# - How to execute command on button in WPF?
- c# - 对于我从代码的多个部分更改的变量,从 public int 更改为 volatile int 有什么好处吗?
- r - 按具有不同 ID 值的列扩展 R 中的数据框
- ruby-on-rails - Rails request.headers 数据不更新而不刷新
- php - 混合 PHP 和 HTML 到 pdf
- python - TensorFlow:创建混淆矩阵时无法将图像转换为浮点数
- android - android - 在某些手机上改造返回 null
- flutter - 在 ListTile 中放置两个尾随图标