解析Perl 5并检查语法树

时间:2018-03-13 17:02:38

标签: perl parsing abstract-syntax-tree

我已阅读并理解,由于BEGIN阻止,因此无法在没有Perl解释器的情况下解析Perl 5代码。

我知道有独立的解析器 PPI (由Perl::Critic使用) 大致解析初始文件。

但是我找不到任何关于输出某种类型的程序的参考 抽象语法树,或类似于Perl用于执行阶段的树的内部结构。

比较解析和执行阶段的内部表示以查看代码的扩展和更改将会很有趣。

1 个答案:

答案 0 :(得分:2)

所以基本上有几个选择:

  1. 对于静态分析,请使用PPI,其缺点是不在BEGIN块处理Perl代码。这类似于"解析"。

  2. 对于动态分析,请使用Use B::Concise获取用于执行的内部操作码。这类似于"编译" (对Perl VM)。

  3. 两者的组合将使用B::Deparse来获取内部表示的Perl代码(而不是VM操作码),然后将其发送到PPI以构建树。

  4. 编辑:根据评论澄清第3点。仍然不知道一个扩展导入并输出单个大文件的命令(以便解析语法扩展)。