解析 Perl 5 并检查语法树

Parsing Perl 5 and examining the syntax tree

我已经阅读并了解到,由于 BEGIN 块,没有 Perl 解释器就无法解析 Perl 5 代码。

我知道有独立的解析器,比如 PPI (被 Perl::Critic 使用) 大致解析初始文档。

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

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

所以基本上有几个选项:

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

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

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

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