Skip to content

An extensible mathematical expression parser and evaluator with large number support in PHP.

License

Notifications You must be signed in to change notification settings

btry/php-expressions

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PHP Expressions.

Simple mathematical expression parser and calculator.

Install

The recommended way to install this library is through composer.

composer require xylemical/php-expressions

Usage

Most basic use of the parsing and evaluation classes:

<?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($parser);
$evaluator = new Evaluator();
$context = new Context();

$tokens = $parser->parse('1 + 1');
$result = $evaluator->evaluate($tokens, $context);

Variables.

Extending the expression factory to incorporate variable substitution involves adding a Value operator that will parse the variable, and use the values from the 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);

Functions

Extending the expression factory to incorporate more functions involves adding a Procedure operator that will parse the function name, and perform the expression substitution.

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);

License

MIT, see LICENSE.

About

An extensible mathematical expression parser and evaluator with large number support in PHP.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • PHP 100.0%