解析Perl 5并检查语法树

Ale*_*ver 9 perl parsing abstract-syntax-tree

我已经阅读并理解,由于这些BEGIN块,没有Perl解释器就不可能解析Perl 5代码.

我知道有一些独立的解析器,比如 PPI (用于Perl::Critic)大致解析初始文档.

但是我找不到任何关于输出某种抽象语法树的过程的引用 ,或者任何类似于Perl用于执行阶段的树的内部结构.

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

Ale*_*ver 2

所以基本上有几个选择:

  1. 对于静态分析,请使用PPI,它的缺点是不能按BEGIN块处理 Perl 代码。这类似于“解析”。

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

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

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