From aa996ec3efaba255cb30a7b8c81f4b89b0e7fceb Mon Sep 17 00:00:00 2001 From: Ivan Bushchik Date: Fri, 3 Feb 2023 15:45:34 +0300 Subject: [PATCH] tasks.rs: add exit function --- README.md | 161 ++++++++++++++++++++++++++------------------------- src/tasks.rs | 8 ++- 2 files changed, 88 insertions(+), 81 deletions(-) diff --git a/README.md b/README.md index 350ee42..63b89e1 100644 --- a/README.md +++ b/README.md @@ -14,96 +14,97 @@ cargo install feval Supported binary operators: -| Operator | Precedence | Description | -|----------|------------|-------------| -| ^ | 120 | Exponentiation | -| * | 100 | Product | -| / | 100 | Division (integer if both arguments are integers, otherwise float) | -| % | 100 | Modulo (integer if both arguments are integers, otherwise float) | -| + | 95 | Sum or String Concatenation | -| - | 95 | Difference | -| < | 80 | Lower than | -| \> | 80 | Greater than | -| <= | 80 | Lower than or equal | -| \>= | 80 | Greater than or equal | -| == | 80 | Equal | -| != | 80 | Not equal | -| && | 75 | Logical and | -| || | 70 | Logical or | -| = | 50 | Assignment | -| += | 50 | Sum-Assignment or String-Concatenation-Assignment | -| -= | 50 | Difference-Assignment | -| *= | 50 | Product-Assignment | -| /= | 50 | Division-Assignment | -| %= | 50 | Modulo-Assignment | -| ^= | 50 | Exponentiation-Assignment | -| &&= | 50 | Logical-And-Assignment | -| ||= | 50 | Logical-Or-Assignment | -| , | 40 | Aggregation | -| ; | 0 | Expression Chaining | +| Operator | Precedence | Description | +|---------------|------------|--------------------------------------------------------------------| +| ^ | 120 | Exponentiation | +| * | 100 | Product | +| / | 100 | Division (integer if both arguments are integers, otherwise float) | +| % | 100 | Modulo (integer if both arguments are integers, otherwise float) | +| + | 95 | Sum or String Concatenation | +| - | 95 | Difference | +| < | 80 | Lower than | +| \> | 80 | Greater than | +| <= | 80 | Lower than or equal | +| \>= | 80 | Greater than or equal | +| == | 80 | Equal | +| != | 80 | Not equal | +| && | 75 | Logical and | +| || | 70 | Logical or | +| = | 50 | Assignment | +| += | 50 | Sum-Assignment or String-Concatenation-Assignment | +| -= | 50 | Difference-Assignment | +| *= | 50 | Product-Assignment | +| /= | 50 | Division-Assignment | +| %= | 50 | Modulo-Assignment | +| ^= | 50 | Exponentiation-Assignment | +| &&= | 50 | Logical-And-Assignment | +| ||= | 50 | Logical-Or-Assignment | +| , | 40 | Aggregation | +| ; | 0 | Expression Chaining | Supported unary operators: | Operator | Precedence | Description | |----------|------------|-------------| -| - | 110 | Negation | -| ! | 110 | Logical not | +| - | 110 | Negation | +| ! | 110 | Logical not | ## Functions -| Identifier | Argument Amount | Argument Types | Description | -|----------------------|-----------------|------------------------|-------------| -| `min` | >= 1 | Numeric | Returns the minimum of the arguments | -| `max` | >= 1 | Numeric | Returns the maximum of the arguments | -| `len` | 1 | String/Tuple | Returns the character length of a string, or the amount of elements in a tuple (not recursively) | -| `floor` | 1 | Numeric | Returns the largest integer less than or equal to a number | -| `round` | 1 | Numeric | Returns the nearest integer to a number. Rounds half-way cases away from 0.0 | -| `ceil` | 1 | Numeric | Returns the smallest integer greater than or equal to a number | -| `if` | 3 | Boolean, Any, Any | If the first argument is true, returns the second argument, otherwise, returns the third | -| `typeof` | 1 | Any | returns "string", "float", "int", "boolean", "tuple", or "empty" depending on the type of the argument | -| `math::is_nan` | 1 | Numeric | Returns true if the argument is the floating-point value NaN, false if it is another floating-point value, and throws an error if it is not a number | -| `math::is_finite` | 1 | Numeric | Returns true if the argument is a finite floating-point number, false otherwise | -| `math::is_infinite` | 1 | Numeric | Returns true if the argument is an infinite floating-point number, false otherwise | -| `math::is_normal` | 1 | Numeric | Returns true if the argument is a floating-point number that is neither zero, infinite, [subnormal](https://en.wikipedia.org/wiki/Subnormal_number), or NaN, false otherwise | -| `math::ln` | 1 | Numeric | Returns the natural logarithm of the number | -| `math::log` | 2 | Numeric, Numeric | Returns the logarithm of the number with respect to an arbitrary base | -| `math::log2` | 1 | Numeric | Returns the base 2 logarithm of the number | -| `math::log10` | 1 | Numeric | Returns the base 10 logarithm of the number | -| `math::exp` | 1 | Numeric | Returns `e^(number)`, (the exponential function) | -| `math::exp2` | 1 | Numeric | Returns `2^(number)` | -| `math::pow` | 2 | Numeric, Numeric | Raises a number to the power of the other number | -| `math::cos` | 1 | Numeric | Computes the cosine of a number (in radians) | -| `math::acos` | 1 | Numeric | Computes the arccosine of a number. The return value is in radians in the range [0, pi] or NaN if the number is outside the range [-1, 1] | -| `math::cosh` | 1 | Numeric | Hyperbolic cosine function | -| `math::acosh` | 1 | Numeric | Inverse hyperbolic cosine function | -| `math::sin` | 1 | Numeric | Computes the sine of a number (in radians) | -| `math::asin` | 1 | Numeric | Computes the arcsine of a number. The return value is in radians in the range [-pi/2, pi/2] or NaN if the number is outside the range [-1, 1] | -| `math::sinh` | 1 | Numeric | Hyperbolic sine function | -| `math::asinh` | 1 | Numeric | Inverse hyperbolic sine function | -| `math::tan` | 1 | Numeric | Computes the tangent of a number (in radians) | -| `math::atan` | 1 | Numeric | Computes the arctangent of a number. The return value is in radians in the range [-pi/2, pi/2] | -| `math::atan2` | 2 | Numeric, Numeric | Computes the four quadrant arctangent in radians | -| `math::tanh` | 1 | Numeric | Hyperbolic tangent function | -| `math::atanh` | 1 | Numeric | Inverse hyperbolic tangent function. | -| `math::sqrt` | 1 | Numeric | Returns the square root of a number. Returns NaN for a negative number | -| `math::cbrt` | 1 | Numeric | Returns the cube root of a number | -| `math::hypot` | 2 | Numeric | Calculates the length of the hypotenuse of a right-angle triangle given legs of length given by the two arguments | -| `str::to_lowercase` | 1 | String | Returns the lower-case version of the string | -| `str::to_uppercase` | 1 | String | Returns the upper-case version of the string | -| `str::trim` | 1 | String | Strips whitespace from the start and the end of the string | -| `str::from` | >= 0 | Any | Returns passed value as string | -| `bitand` | 2 | Int | Computes the bitwise and of the given integers | -| `bitor` | 2 | Int | Computes the bitwise or of the given integers | -| `bitxor` | 2 | Int | Computes the bitwise xor of the given integers | -| `bitnot` | 1 | Int | Computes the bitwise not of the given integer | -| `shl` | 2 | Int | Computes the given integer bitwise shifted left by the other given integer | -| `shr` | 2 | Int | Computes the given integer bitwise shifted right by the other given integer | +| Identifier | Argument Amount | Argument Types | Description | +|---------------------|-----------------|-------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `min` | >= 1 | Numeric | Returns the minimum of the arguments | +| `max` | >= 1 | Numeric | Returns the maximum of the arguments | +| `len` | 1 | String/Tuple | Returns the character length of a string, or the amount of elements in a tuple (not recursively) | +| `floor` | 1 | Numeric | Returns the largest integer less than or equal to a number | +| `round` | 1 | Numeric | Returns the nearest integer to a number. Rounds half-way cases away from 0.0 | +| `ceil` | 1 | Numeric | Returns the smallest integer greater than or equal to a number | +| `if` | 3 | Boolean, Any, Any | If the first argument is true, returns the second argument, otherwise, returns the third | +| `typeof` | 1 | Any | returns "string", "float", "int", "boolean", "tuple", or "empty" depending on the type of the argument | +| `math::is_nan` | 1 | Numeric | Returns true if the argument is the floating-point value NaN, false if it is another floating-point value, and throws an error if it is not a number | +| `math::is_finite` | 1 | Numeric | Returns true if the argument is a finite floating-point number, false otherwise | +| `math::is_infinite` | 1 | Numeric | Returns true if the argument is an infinite floating-point number, false otherwise | +| `math::is_normal` | 1 | Numeric | Returns true if the argument is a floating-point number that is neither zero, infinite, [subnormal](https://en.wikipedia.org/wiki/Subnormal_number), or NaN, false otherwise | +| `math::ln` | 1 | Numeric | Returns the natural logarithm of the number | +| `math::log` | 2 | Numeric, Numeric | Returns the logarithm of the number with respect to an arbitrary base | +| `math::log2` | 1 | Numeric | Returns the base 2 logarithm of the number | +| `math::log10` | 1 | Numeric | Returns the base 10 logarithm of the number | +| `math::exp` | 1 | Numeric | Returns `e^(number)`, (the exponential function) | +| `math::exp2` | 1 | Numeric | Returns `2^(number)` | +| `math::pow` | 2 | Numeric, Numeric | Raises a number to the power of the other number | +| `math::cos` | 1 | Numeric | Computes the cosine of a number (in radians) | +| `math::acos` | 1 | Numeric | Computes the arccosine of a number. The return value is in radians in the range [0, pi] or NaN if the number is outside the range [-1, 1] | +| `math::cosh` | 1 | Numeric | Hyperbolic cosine function | +| `math::acosh` | 1 | Numeric | Inverse hyperbolic cosine function | +| `math::sin` | 1 | Numeric | Computes the sine of a number (in radians) | +| `math::asin` | 1 | Numeric | Computes the arcsine of a number. The return value is in radians in the range [-pi/2, pi/2] or NaN if the number is outside the range [-1, 1] | +| `math::sinh` | 1 | Numeric | Hyperbolic sine function | +| `math::asinh` | 1 | Numeric | Inverse hyperbolic sine function | +| `math::tan` | 1 | Numeric | Computes the tangent of a number (in radians) | +| `math::atan` | 1 | Numeric | Computes the arctangent of a number. The return value is in radians in the range [-pi/2, pi/2] | +| `math::atan2` | 2 | Numeric, Numeric | Computes the four quadrant arctangent in radians | +| `math::tanh` | 1 | Numeric | Hyperbolic tangent function | +| `math::atanh` | 1 | Numeric | Inverse hyperbolic tangent function. | +| `math::sqrt` | 1 | Numeric | Returns the square root of a number. Returns NaN for a negative number | +| `math::cbrt` | 1 | Numeric | Returns the cube root of a number | +| `math::hypot` | 2 | Numeric | Calculates the length of the hypotenuse of a right-angle triangle given legs of length given by the two arguments | +| `str::to_lowercase` | 1 | String | Returns the lower-case version of the string | +| `str::to_uppercase` | 1 | String | Returns the upper-case version of the string | +| `str::trim` | 1 | String | Strips whitespace from the start and the end of the string | +| `str::from` | >= 0 | Any | Returns passed value as string | +| `bitand` | 2 | Int | Computes the bitwise and of the given integers | +| `bitor` | 2 | Int | Computes the bitwise or of the given integers | +| `bitxor` | 2 | Int | Computes the bitwise xor of the given integers | +| `bitnot` | 1 | Int | Computes the bitwise not of the given integer | +| `shl` | 2 | Int | Computes the given integer bitwise shifted left by the other given integer | +| `shr` | 2 | Int | Computes the given integer bitwise shifted right by the other given integer | +| `exit` | 0 | None | Exits | ## Constants -| Identifier | Value | Description | -|------------|-------|-------------| -| `math::pi` | 3.141592653589793 (`std::f64::consts::PI`) | Pi | -| `math::e` | 2.718281828459045 (`std::f64::consts::E`) | Euler's number | +| Identifier | Value | Description | +|------------|--------------------------------------------|----------------| +| `math::pi` | 3.141592653589793 (`std::f64::consts::PI`) | Pi | +| `math::e` | 2.718281828459045 (`std::f64::consts::E`) | Euler's number | ## License diff --git a/src/tasks.rs b/src/tasks.rs index 87bc793..3423daf 100644 --- a/src/tasks.rs +++ b/src/tasks.rs @@ -2,9 +2,15 @@ pub mod tasks { use std::f64::consts; pub fn all(expr: String) -> String { - convert_constants(expr) + convert_constants(exit(expr)) } fn convert_constants(expr: String) -> String { expr.replace("math::pi", &consts::PI.to_string()).replace("math::e", &consts::E.to_string()) } + fn exit(expr: String) -> String { + if expr.contains("exit") { + std::process::exit(0); + } + expr + } } \ No newline at end of file