diff options
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); + } +} |