返回顶部
首页 > 资讯 > 后端开发 > 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://lsjlt.com/news/33568.html(转载时请注明来源链接)

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

猜你喜欢
  • 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的用法
    一、介绍 argparse 模块可以让人轻松编写用户友好的命令行接口。程序定义它需要的参数,然后 argparse 将弄清如何从 sys.argv 解析出那些参数。 argparse 模块还会自动生成帮助和使用手册,...
    99+
    2022-06-02
    Parser的用法 Python Parser
  • Java Parser类的作用是什么
    Java Parser类的作用是将源代码转换为抽象语法树(AST),从而可以对源代码进行分析和处理。它可以解析Java源文件,并将其...
    99+
    2023-10-23
    Java
  • Java Parser类的用法是什么
    Java Parser类是一个用于解析和分析Java源代码的工具类。它提供了一些方法和功能,用于读取Java源代码文件,并将其解析为...
    99+
    2023-10-18
    Java
  • Python递归下降Parser怎么实现
    1. 算术运算表达式求值要解析这类文本,需要另外一种特定的语法规则。我们这里介绍可以表示上下文无关文法(context free grammer)的语法规则巴科斯范式(BNF)和扩展巴科斯范式(EBNF)。从小到一个算术运算表达式,到大到几...
    99+
    2023-05-17
    Python parser
  • Parser中tokenizer.h如何使用
    Parser中tokenizer.h如何使用,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。在Parser目录下的tokenizer.h和tokenizer.cpp。Python...
    99+
    2023-06-17
  • XML DOM解析器错误Parser Errors怎么解决
    要解决XML DOM解析器错误Parser Errors,可以尝试以下步骤:1. 检查XML文档的语法:确保XML文档的语法正确,没...
    99+
    2023-09-05
    XML
  • msxml 4.0 sp3 parser指的是什么
    这篇文章将为大家详细讲解有关msxml 4.0 sp3 parser指的是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。msxml 4.0 sp3 parser是指微软的xml语言解析器,msxml ...
    99+
    2023-06-06
  • Python中Parser的超详细用法实例
    目录1 前言2.使用方法2.1 实例化ArgumentParser2.2 使用add_argument函数添加参数 2.3 add_argument() 方法定义如何解析命...
    99+
    2024-04-02
  • Nodejs中Express 常用中间件 body-parser 实现解析
    写在前面 body-parser是非常常用的一个express中间件,作用是对post请求的请求体进行解析。使用非常简单,以下两行代码已经覆盖了大部分的使用场景。 app.use(bodyParser....
    99+
    2022-06-04
    中间件 常用 Express
  • node.js中express中间件body-parser的介绍与用法详解
    前言 Node中的核心模块分两类:一类是自带的核心模块,如http、tcp等,第二类是第三方核心模块,express就是与http对应的第三方核心模块,用于处理http请求。express在3.0版本中自带...
    99+
    2022-06-04
    详解 中间件 js
  • 使用JSX 建立组件 Parser(解析器)开发的示例
    目录JSX 环境搭建建立项目初始化 NPM安装 webpack安装 Babel配置 webpack安装 Babel-loader模式配置引入 JSXJSX 基本用法JSX 基础原理实...
    99+
    2024-04-02
  • 如何利用Log Parser将IIS日志保存到数据库
    这篇文章主要讲解了“如何利用Log Parser将IIS日志保存到数据库”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何利用Log Parser将IIS日志保存到数据库”吧!一个小时把上一...
    99+
    2023-06-19
  • PHP中php://input怎么用
    本文操作环境:Windows7系统,PHP7.1版,Dell G3电脑。PHP中php://input怎么用?对于php://input介绍,PHP官方手册文档有一段话对它进行了很明确地概述。“php://input allows you ...
    99+
    2015-01-18
    PHP 输入流
  • 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+
    2024-04-02
  • php return怎么用
    本篇内容主要讲解“php return怎么用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php return怎么用”吧!php return的用法:1、通过“return expression...
    99+
    2023-06-07
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作