aboutsummaryrefslogtreecommitdiff
path: root/README.md
diff options
context:
space:
mode:
authorNeonXP <frei@neonxp.info>2013-09-06 05:42:09 +0400
committerNeonXP <frei@neonxp.info>2013-09-06 05:42:09 +0400
commit9cdc34290a84093b1c4640118289a7cf56d55125 (patch)
tree2187fa94cc9f152c9196e7bd4fe23a2c81f60ffd /README.md
parentf172123a0dccdca7651c7ad552175924a16b9458 (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.md72
1 files changed, 62 insertions, 10 deletions
diff --git a/README.md b/README.md
index ca5ea65..9bc06e3 100644
--- a/README.md
+++ b/README.md
@@ -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