植物化学 / php表达式
一个可扩展的数学表达式解析器和评估器。
v1.1.0
2022-08-31 09:04 UTC
Requires
- php: >=7.1.0|>=8.0
Requires (Dev)
- ext-bcmath: *
- phpunit/phpunit: ^7.0|^8.0
README
简单的数学表达式解析器和计算器。
安装
安装此库的推荐方法是 通过composer。
composer require xylemical/php-expressions
用法
解析和评估类的基本使用
<?php use Xylemical\Expressions\Math\BcMath; use Xylemical\Expressions\Context; use Xylemical\Expressions\ExpressionFactory; use Xylemical\Expressions\Evaluator; use Xylemical\Expressions\Lexer; use Xylemical\Expressions\Parser; $math = new BcMath(); $factory = new ExpressionFactory($math); $lexer = new Lexer($factory); $parser = new Parser($lexer); $evaluator = new Evaluator(); $context = new Context(); $tokens = $parser->parse('1 + 1'); $result = $evaluator->evaluate($tokens, $context);
变量。
扩展表达式工厂以实现变量替换涉及添加一个值操作符,该操作符将解析变量,并使用上下文中的值
use Xylemical\Expressions\Token; use Xylemical\Expressions\Value; $factory->addOperator(new Value('\$[a-zA-Z_][a-zA-Z0-9_]*', function(array $operands, Context $context, Token $token) { return $context->getVariable(substr($token->getValue(), 1)); })); $context->setVariable('example', 10); $tokens = $parser->parse('2 * $example'); $result = $evaluator->evaluate($tokens, $context);
函数
扩展表达式工厂以包含更多函数涉及添加一个过程操作符,该操作符将解析函数名,并执行表达式替换。
use Xylemical\Expressions\Token; use Xylemical\Expressions\Procedure; $factory->addOperator(new Procedure('ABS', 1, function(array $operands, Context $context, Token $token) { $value = $token->getValue(); if (substr($value, 0, 1) === '-') { return substr($value, 1); } return $value; })); $tokens = $parser->parse('abs(-1.2)'); $result = $evaluator->evaluate($tokens, $context);
许可证
MIT,见LICENSE。