解析Perl 5并检查语法树

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解析Perl 5并检查语法树相关的知识,希望对你有一定的参考价值。

我已经阅读并理解,由于BEGIN块,在没有Perl解释器的情况下解析Perl 5代码是不可能的。

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

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

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

答案

所以基本上有几个选择:

  1. 对于静态分析,使用PPI,它具有不在BEGIN块处理Perl代码的缺点。这类似于“解析”。
  2. 对于动态分析,请使用use B::Concise获取用于执行的内部操作码。这类似于“编译”(对Perl VM)。
  3. 两者的组合将使用B::Deparse获取内部表示的Perl代码(而不是VM操作码),然后将其发送到PPI以构建树。

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

以上是关于解析Perl 5并检查语法树的主要内容,如果未能解决你的问题,请参考以下文章

Perl 5.20.0 发布

自己动手写编译器:通过语法编译构建语法树并实现中间代码生成

Mysql流程解析

JavaScript的工作原理:解析抽象语法树(AST)+ 提升编译速度5个技巧

如何检查另一个不使用 perl -c 的 perl 脚本的语法? [复制]

typescript和javascrpt代码检查