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 /src/NXP/Classes/Token/TokenFunction.php | |
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 'src/NXP/Classes/Token/TokenFunction.php')
-rw-r--r-- | src/NXP/Classes/Token/TokenFunction.php | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/NXP/Classes/Token/TokenFunction.php b/src/NXP/Classes/Token/TokenFunction.php new file mode 100644 index 0000000..23f64bd --- /dev/null +++ b/src/NXP/Classes/Token/TokenFunction.php @@ -0,0 +1,41 @@ +<?php +/** + * This file is part of the MathExecutor package + * + * (c) Alexander Kiryukhin + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code + */ + +namespace NXP\Classes\Token; + +/** + * @author Alexander Kiryukhin <alexander@symdev.org> + */ +class TokenFunction extends AbstractContainerToken implements InterfaceFunction +{ + /** + * @return string + */ + public static function getRegex() + { + return '[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*'; + } + + /** + * @param array $stack + * @return $this + */ + public function execute(&$stack) + { + $args = array(); + list($places, $function) = $this->value; + for ($i = 0; $i < $places; $i++) { + array_push($args, array_pop($stack)->getValue()); + } + $result = call_user_func_array($function, $args); + + return new TokenNumber($result); + } +} |