aboutsummaryrefslogtreecommitdiff
path: root/src/NXP/Classes/Token/TokenFunction.php
diff options
context:
space:
mode:
Diffstat (limited to 'src/NXP/Classes/Token/TokenFunction.php')
-rw-r--r--src/NXP/Classes/Token/TokenFunction.php41
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);
+ }
+}