植物化学/php表达式

一个可扩展的数学表达式解析器和评估器。

v1.1.0 2022-08-31 09:04 UTC

This package is auto-updated.

Last update: 2024-08-29 04:31:37 UTC


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。