我们应该能够以某种方式做到这一点.我想我已经在某个地方看到了它,但我找不到我想起的东西.大多数情况下,我想看看编译器如何解释代码.
与反编译一起,有没有办法观察它在编译时正在做什么?我认为看到它正在尝试做什么,哪里可能比试图理解它的一些错误消息更容易.并且,反编译程序可以撤消所有的简写和聪明,以阐明实际发生的事情.
解决方法
我不确定你为什么要这样做.此外,编译结果依赖于后端,并且您没有指定后端.无论如何,使用–target =参数,您可以获得中间结果.最有用的是:
$perl6 --target=parse -e 'say "foo"' - statementlist: say "foo" - statement: 1 matches - EXPR: say "foo" - args: "foo" - arglist: "foo" - EXPR: "foo" - value: "foo" - quote: "foo" - nibble: foo - longname: say - name: say - identifier: say - morename: isa NQPArray - colonpair: isa NQPArray
–target = parse显示解析的直接结果.
$perl6 --target=ast -e 'say "foo"' - QAST::CompUnit :W<?> :UNIT<?> [pre_deserialize] - QAST::Stmt - QAST::Stmt - QAST::Op(loadbytecode) - QAST::VM [jvm] - QAST::SVal(ModuleLoader.class) [moar] - QAST::SVal(ModuleLoader.moarvm) - QAST::Op(callmethod load_module) *snip*
–target = ast显示抽象语法树.
$perl6 --target=mast -e 'say "foo"' MAST::Frame name<<unit-outer>>,cuuid<2> Local types: 0<obj>,1<obj>,2<obj>,3<obj>,Outer: <none> Instructions: [0] MAST::Op getcode MAST::Local index<3> MAST::Frame name<<unit>>,cuuid<1> [1] MAST::Op capturelex MAST::Local index<3> [2] MAST::Op getcode MAST::Local index<1> MAST::Frame name<<unit>>,cuuid<1> [3] MAST::Op takeclosure *snip*