diff options
author | NeonXP <frei@neonxp.info> | 2013-09-06 05:42:09 +0400 |
---|---|---|
committer | NeonXP <frei@neonxp.info> | 2013-09-06 05:42:09 +0400 |
commit | 9cdc34290a84093b1c4640118289a7cf56d55125 (patch) | |
tree | 2187fa94cc9f152c9196e7bd4fe23a2c81f60ffd /README.md | |
parent | f172123a0dccdca7651c7ad552175924a16b9458 (diff) |
Mass refactoring
Some changes:
+ Added support of functions with multiple arguments
+ Added some default function (min, max, avg). just example of multiple arguments :)
- Removed variables support (I think they pointless)
~ All tokens now in individual classes
~ Parsing based on regular expressions
~ Fix negative numbers
~ Fix grouping with brackets
Diffstat (limited to 'README.md')
-rw-r--r-- | README.md | 72 |
1 files changed, 62 insertions, 10 deletions
@@ -13,7 +13,7 @@ require "vendor/autoload.php"; $calculator = new \NXP\MathExecutor(); -print $calculator->execute("1 + 2 * (2 - (4+10))^2"); +print $calculator->execute("1 + 2 * (2 - (4+10))^2 + sin(10)"); ``` ## Functions: @@ -23,28 +23,80 @@ Default functions: * cos * tn * asin -* asoc +* acos * atn +* min +* max +* avg Add custom function to executor: ```php $executor->addFunction('abs', function($arg) { return abs($arg); -}); +}, 1); ``` ## Operators: Default operators: `+ - * / ^` -## Variables: +Add custom operator to executor: -You can add own variable to executor: +MyNamespace/ModulusToken.php: ```php -$executor->setVars(array( - 'var1' => 0.15, - 'var2' => 0.22 -)); +<?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: -$executor->execute("var1 + var2");
\ No newline at end of file +```php +$executor->addOperator('MyNamespace\ModulusToken'); +```
\ No newline at end of file |