2013-09-06 08:32:03 +04:00
|
|
|
# MathExecutor
|
2013-03-14 04:27:37 +04:00
|
|
|
|
2013-09-06 08:26:53 +04:00
|
|
|
[![Build Status](https://travis-ci.org/NeonXP/MathExecutor.png?branch=master)](https://travis-ci.org/NeonXP/MathExecutor)
|
|
|
|
|
2013-09-06 08:32:03 +04:00
|
|
|
Simple math expressions calculator
|
|
|
|
|
2013-03-14 04:36:17 +04:00
|
|
|
## Install via Composer
|
|
|
|
|
2013-03-14 04:36:29 +04:00
|
|
|
All instructions to install here: https://packagist.org/packages/nxp/math-executor
|
2013-08-03 14:47:47 +04:00
|
|
|
|
|
|
|
## Sample usage:
|
|
|
|
|
|
|
|
```php
|
|
|
|
require "vendor/autoload.php";
|
|
|
|
|
|
|
|
$calculator = new \NXP\MathExecutor();
|
|
|
|
|
2013-09-06 05:42:09 +04:00
|
|
|
print $calculator->execute("1 + 2 * (2 - (4+10))^2 + sin(10)");
|
2013-08-03 14:47:47 +04:00
|
|
|
```
|
|
|
|
|
|
|
|
## Functions:
|
|
|
|
|
|
|
|
Default functions:
|
|
|
|
* sin
|
|
|
|
* cos
|
|
|
|
* tn
|
|
|
|
* asin
|
2013-09-06 05:42:09 +04:00
|
|
|
* acos
|
2013-08-03 14:47:47 +04:00
|
|
|
* atn
|
2013-09-06 05:42:09 +04:00
|
|
|
* min
|
|
|
|
* max
|
|
|
|
* avg
|
2013-08-03 14:47:47 +04:00
|
|
|
|
|
|
|
Add custom function to executor:
|
|
|
|
```php
|
|
|
|
$executor->addFunction('abs', function($arg) {
|
|
|
|
return abs($arg);
|
2013-09-06 05:42:09 +04:00
|
|
|
}, 1);
|
2013-08-03 14:47:47 +04:00
|
|
|
```
|
|
|
|
|
|
|
|
## Operators:
|
|
|
|
|
|
|
|
Default operators: `+ - * / ^`
|
|
|
|
|
2013-09-06 05:42:09 +04:00
|
|
|
Add custom operator to executor:
|
2013-08-03 14:47:47 +04:00
|
|
|
|
2013-09-06 05:42:09 +04:00
|
|
|
MyNamespace/ModulusToken.php:
|
2013-08-03 14:47:47 +04:00
|
|
|
|
|
|
|
```php
|
2013-09-06 05:42:09 +04:00
|
|
|
<?php
|
|
|
|
namespace MyNamespace;
|
|
|
|
|
|
|
|
use NXP\Classes\Token\AbstractOperator;
|
|
|
|
|
|
|
|
class ModulusToken extends AbstractOperator
|
|
|
|
{
|
|
|
|
/**
|
|
|
|
* Regex of this operator
|
|
|
|
* @return string
|
|
|
|
*/
|
|
|
|
public static function getRegex()
|
|
|
|
{
|
|
|
|
return '\%';
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Priority of this operator
|
|
|
|
* @return int
|
|
|
|
*/
|
|
|
|
public function getPriority()
|
|
|
|
{
|
|
|
|
return 3;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Associaion of this operator (self::LEFT_ASSOC or self::RIGHT_ASSOC)
|
|
|
|
* @return string
|
|
|
|
*/
|
|
|
|
public function getAssociation()
|
|
|
|
{
|
|
|
|
return self::LEFT_ASSOC;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Execution of this operator
|
|
|
|
* @param InterfaceToken[] $stack Stack of tokens
|
|
|
|
* @return TokenNumber Result of execution
|
|
|
|
*/
|
|
|
|
public function execute(&$stack)
|
|
|
|
{
|
|
|
|
$op2 = array_pop($stack);
|
|
|
|
$op1 = array_pop($stack);
|
|
|
|
$result = $op1->getValue() % $op2->getValue();
|
|
|
|
|
|
|
|
return new TokenNumber($result);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
And adding to executor:
|
2013-08-03 14:47:47 +04:00
|
|
|
|
2013-09-06 05:42:09 +04:00
|
|
|
```php
|
|
|
|
$executor->addOperator('MyNamespace\ModulusToken');
|
2013-09-06 08:19:02 +04:00
|
|
|
```
|
|
|
|
|
|
|
|
## Variables:
|
|
|
|
|
|
|
|
Default variables:
|
|
|
|
|
|
|
|
$pi = 3.14159265359
|
|
|
|
$e = 2.71828182846
|
|
|
|
|
|
|
|
You can add own variable to executor:
|
|
|
|
|
|
|
|
```php
|
|
|
|
$executor->setVars(array(
|
|
|
|
'var1' => 0.15,
|
|
|
|
'var2' => 0.22
|
|
|
|
));
|
|
|
|
|
2013-09-06 08:26:53 +04:00
|
|
|
$executor->execute("$var1 + $var2");
|