作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们应该能够以某种方式做到这一点。我想我在某处见过它,但我找不到我认为我记得的东西。我主要想看看编译器如何解释代码。
除了反编译,有没有办法在编译时观察它在做什么?我认为查看它正在尝试做什么以及在哪里可能比尝试理解它的一些错误消息更容易。而且,反编译程序可以消除所有速记和聪明来阐明实际发生的事情。
最佳答案
我不确定你为什么要这样做。此外,编译结果依赖于后端,您没有指定后端。不管怎样,用--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*
--target=mast
显示正在生成的实际字节码,在本例中为 MoarVM 后端。
关于raku - 如何反编译 Perl 6?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44895625/
我是一名优秀的程序员,十分优秀!