广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >php parser怎么用
  • 314
分享到

php parser怎么用

php 2022-08-08 13:08:50 314人浏览 安东尼
摘要

“PHP parser”用于生成模板代码,或者使用其生成的抽象语法树进行静态分析;“php parser”是有nikic开发的一款PHP抽象语法树解析工具,同时兼顾接口易用,结构简介,工具链完善等诸多优点。本文操作环境:windows10系

PHP parser”用于生成模板代码,或者使用其生成的抽象语法树进行静态分析;“php parser”是有nikic开发的一款PHP抽象语法树解析工具,同时兼顾接口易用,结构简介,工具链完善等诸多优点。

本文操作环境:windows10系统、PHP8.1版、Dell G3电脑

php parser怎么用

PHP Parser是由 nikic 开发的一款php抽象语法树(AST)解析工具。PHP Parser同时兼顾接口易用,结构简洁,工具链完善等诸多优点。在工程上,普遍使用PHP Paser生成模板代码,或使用其生成的抽象语法树进行静态分析。

PHP Parser 是一个用于源代码解析的项目,值得一提的是它使用纯 PHP 编写,对于 PHP 程序员来说,能使用自己熟悉的语言来做静态分析等源码处理,无疑是一大便利。

PHP 是动态语言,性能不高,所以用 PHP Parser 分析 PHP 代码,性能也比较差。幸好代码分析这种场景,一般对性能要求也不高。

PHP 自带的 token_get_all 函数使用 Zend 引擎的语法分析器将源码切分成一连串的 token,虽然使用这些 token 可以完成很多代码分析及处理的任务,不过由于 token 的结构太原始,遍历和操作都十分不方便。同样是基于 token_get_all 分析的结果,著名的代码标准化工具 PHP CodeSniffer 就是在对 token 作了很多处理并提供了一系列查找和遍历的接口的前提下,才让代码分析变得简便了些。

PHP Parser 可以生成 PHP 代码对应的抽象语法树(AST,即 Abstract Syntax Tree)结构,极大地简化源代码的遍历等操作。

PHP parser 的解析结果示例

对于以下一段 PHP 代码:

<?php
echo 'Hi', 'World';

解析后生成的树结构如下:

array(
    0: Stmt_Echo(
        exprs: array(
            0: Scalar_String(
                value: Hi
            )
            1: Scalar_String(
                value: World
            )
        )
    )
)

PHP parser 生成的语法树的结构

为了进一步简化操作,PHP Parser 对语言节点(node)进行分组:

PhpParserNodeStmt 是语句(statement)节点,包括无返回值和不会出现在表达式的语言结构,例如类的定义;

PhpParserNodeExpr 是表达式(expression)节点,包括有返回值和能出现在表达式的语言结构,例如 $var (PhpParserNodeExprVariable) 和 func() (PhpParserNodeExprFuncCall) 等;

PhpParserNodeScalar 标量(Scalar)节点,比如:'string' (PhpParserNodeScalarString_), 0 (PhpParserNodeScalarLNumber) 和魔术常量如 __FILE__ (PhpParserNodeScalarMagicConstFile) 等。它们也算是表达式,所有都继承自表达式节点;

其他节点,例如:名称节点 (PhpParserNodeName) 和参数节点 (PhpParserNodeArg)

凡是节点类名与 PHP 关键字有冲突的,该节点的类名都统一以 _ 结尾,如 PhpParserNodeScalarString_。

PHP Parser 能做什么?

除了单纯的将源代码解析成抽象语法树以外,它还附带了以下特性:

代码生成,可以将抽象语法树转换成 PHP 代码

抽象语法树与 XML 的相互转换

导出便于查看的语法树结构

遍历与修改语法树结构的基类(节点遍历者traverser 和 节点访问者 visitor)

支持命名空间的节点访问者

利用语法树的遍历,我们能够写程序分析代码问题。结合代码生成和语法树结构的遍历修改等特性,我们可以自动化代码重构等等。

以上就是php parser怎么用的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: php parser怎么用

本文链接: https://www.lsjlt.com/news/33568.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • php parser怎么用
    “php parser”用于生成模板代码,或者使用其生成的抽象语法树进行静态分析;“php parser”是有nikic开发的一款PHP抽象语法树解析工具,同时兼顾接口易用,结构简介,工具链完善等诸多优点。本文操作环境:Windows10系...
    99+
    2022-08-08
    php
  • Python中Parser怎么用
    这篇文章主要介绍了Python中Parser怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、介绍argparse 模块可以让人轻松编写用户友好的命令行接口。程序定义它...
    99+
    2023-06-15
  • python parser模块怎么使用
    Python的parser模块是用来解析语法的工具,可以根据给定的语法规则将字符串解析为Python对象。在Python中,有两种常...
    99+
    2023-09-12
    python
  • Python递归下降Parser怎么实现
    1. 算术运算表达式求值要解析这类文本,需要另外一种特定的语法规则。我们这里介绍可以表示上下文无关文法(context free grammer)的语法规则巴科斯范式(BNF)和扩展巴科斯范式(EBNF)。从小到一个算术运算表达式,到大到几...
    99+
    2023-05-17
    Python parser
  • Java Parser类的用法是什么
    Java Parser类是一个用于解析和分析Java源代码的工具类。它提供了一些方法和功能,用于读取Java源代码文件,并将其解析为...
    99+
    2023-10-18
    Java
  • Java Parser类的作用是什么
    Java Parser类的作用是将源代码转换为抽象语法树(AST),从而可以对源代码进行分析和处理。它可以解析Java源文件,并将其...
    99+
    2023-10-23
    Java
  • XML DOM解析器错误Parser Errors怎么解决
    要解决XML DOM解析器错误Parser Errors,可以尝试以下步骤:1. 检查XML文档的语法:确保XML文档的语法正确,没...
    99+
    2023-09-05
    XML
  • PHP中php://input怎么用
    本文操作环境:Windows7系统,PHP7.1版,Dell G3电脑。PHP中php://input怎么用?对于php://input介绍,PHP官方手册文档有一段话对它进行了很明确地概述。“php://input allows you ...
    99+
    2015-01-18
    PHP 输入流
  • php return怎么用
    本篇内容主要讲解“php return怎么用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php return怎么用”吧!php return的用法:1、通过“return expression...
    99+
    2023-06-07
  • php default怎么用
    在PHP中,default关键字需要和switch语句一起使用,用于基于不同的条件来执行不同的动作。switch语句是一个条件选择语句,首先会找到满足条件的case值做为执行后面的程序入口;若所有case都不满足,则找default入口,若...
    99+
    2023-05-14
    default php switch
  • php require_once怎么用
    本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑php require_once语句require_once:它的作用与 require 的作用是一样的,都是引用或包含外部的一个php文件原理:当含有 require...
    99+
    2017-07-12
    php require_once
  • php serialize()怎么用
    本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑php serialize() 函数serialize() 函数用于序列化对象或数组,将其转换为一个可以存储的字符串并返回。以对象为例,当序列化一个对象时,将会保存对象...
    99+
    2018-11-14
    php serialize()
  • php-5.4.45怎么用
    这篇文章主要为大家展示了“ php-5.4.45怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“ php-5.4.45怎么用”这篇文章吧。为了不影响实验效果...
    99+
    2022-10-19
  • php calendar怎么用
    这篇“php calendar怎么用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php calendar怎么用”文章吧。p...
    99+
    2023-06-26
  • openstack中php sdk php-opencloud怎么用
    这篇文章主要介绍了openstack中php sdk php-opencloud怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。&nbs...
    99+
    2022-10-19
  • php mb_strpos怎么使用
    本篇内容主要讲解“php mb_strpos怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php mb_strpos怎么使用”吧!php mb_strpos函数用于查找字符串在另一个字符...
    99+
    2023-06-22
  • php中case怎么用
    这篇文章将为大家详细讲解有关php中case怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。php中case是在switch语句中使用,其使用语法如“switch (n){case label1:br...
    99+
    2023-06-22
  • php中$_SERVER怎么用
    这篇文章主要为大家展示了“php中$_SERVER怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“php中$_SERVER怎么用”这篇文章吧。为了我们了解这个数组,我们来看一个小栗子。<...
    99+
    2023-06-20
  • php的mysql_fetch_row怎么用
    这篇“php的mysql_fetch_row怎么用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php的mysql_fetc...
    99+
    2023-06-30
  • php中continue怎么用
    本教程操作环境:windows7系统、PHP7.1版,DELL G3电脑continue 是用在循环结构中的,它可以控制程序放弃本次循环中 continue 语句之后的代码并进行下一次循环。continue 本身并不跳出循环结构,只是放弃这...
    99+
    2017-09-06
    php continue
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作