从另一个程序获取Perl 6文件的QAST

时间:2018-12-17 09:51:55

标签: abstract-syntax-tree perl6 rakudo nqp

这与this question on accesing the POD有关,但远远不止于此。您可以easily access the Abstract Syntax Tree of a Perl 6 program使用:

import sys
import pandas as pd
import xlsxwriter
def excel_data (arg1,arg2,arg3,arg4):
    df = pd.DataFrame({‘SODA RISK’: [arg1,arg2,arg3,arg4]}) 
    writer = pd.ExcelWriter(‘try_python.xlsx’, engine=‘xlsxwriter’) 
    df.to_excel(writer,sheet_name=‘Sheet1’) 
    writer.save()

这将打印整个Q抽象语法树。目前尚不清楚如何从您自己的程序中做到这一点,或者我还没有找到如何做到这一点。实际上,the CoreHackers::Q module将其作为外部脚本运行。但能够通过自己的程序(例如

)访问它
perl6 --target=ast -e '"Þor is mighty!".say'

会很棒。我很确定在NQP级别,并且有可能以依赖Rakudo的方式,这是有可能的。有人知道热吗?

1 个答案:

答案 0 :(得分:6)

由于QAST不是Perl 6语言规范的一部分,而是Rakudo的内部实现细节,因此没有官方的方法可以做到这一点。最终,将有一个AST形式成为语言规范的一部分,但尚不存在(007项目正在致力于探索这一领域)。

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

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