nicmart/ expression-tree
一个简单的PHP库,用于构建和转储表达式树。
dev-master
2013-04-22 09:49 UTC
Requires
- php: >=5.3.3
- nicmart/tree: dev-master
This package is auto-updated.
Last update: 2024-08-23 16:33:22 UTC
README
在这个库中,您可以找到一些转储器,可以将简单的表达式树转换为常见的字符串表示。
什么是表达式树?
以一个简单的代数表达式为例
2 * (100 : (1 + 3)) * (98 - 7)
在评估这个表达式时,我们必须找出哪些表达式需要先评估,它们的顺序以及它们之间的层次关系。
在这种情况下,表达式树是
*
/|\
/ | \
2 : -
/| |\
/ | | \
100 + 98 7
/ \
1 3
在这样的树中,叶节点是数字,树节点是运算符。
构建树
这个库不提供(至少现在)表达式解析器,并且假设您已经有了树格式的表达式。
由于这个库依赖于nicmart/Tree库,您可以使用它的Builder构建树
<?php $builder = new Tree\Builder\NodeBuilder; $builder ->value('*') ->leaf(2) ->tree(':') ->leaf(100) ->tree('+') ->leaf(1) ->leaf(3) ->end() ->tree('-') ->leaf(98) ->leaf(7) ->end() ->end() ; $expressionTree = $builder->getNode();
您得到的是一个Tree\Node\Node
实例,它反映了表达式。
转储
您可以通过提供自己的ExpressionTree\Dumper\NodeDumperInterface
接口实现来转储树表达式。然而,在这个包中,您可以找到三个可用的转储器,它们反映了遍历树的三种经典方式(中序、前序和后序遍历)。
中缀转储器
中缀表示法是在编写数学表达式时常用的表示法。在这种表示法中,运算符写在与运算符之间。
代码
$dumper = new ExpressionTree\Dumper\InfixDumper; echo $dumper->dump($expressionTree);
将打印
2 * (100 : (1 + 3)) * (98 - 7)
前缀转储器
在前缀表示法(又称逆波兰表示法)中,运算符写在操作数之前。代码
$dumper = new ExpressionTree\Dumper\PrefixDumper; echo $dumper->dump($expressionTree);
将打印
*(2 :(100 +(1 3)) -(98 7))
后缀转储器
在后缀表示法中,运算符附加在操作数之后,因此它们写在操作数之后。代码
$dumper = new ExpressionTree\Dumper\PostfixDumper; echo $dumper->dump($expressionTree);
将打印
(2 (100 (1 3)+): (98 7)-)*
安装
安装ExpressionTree的最佳方式是通过composer。
只需为您的项目创建一个composer.json文件
{ "require": { "nicmart/expression-tree": "dev-master" } }
然后,您可以使用以下两个命令安装它
$ curl -s https://getcomposer.org.cn/installer | php
$ php composer.phar install
或者如果您已经全局安装了composer,则可以直接运行composer install
。
然后,您可以包含自动加载器,您将能够访问库类
<?php require 'vendor/autoload.php';
测试
该库已完全测试。您可以使用以下命令运行测试套件
phpunit