Crates.io | arithmetic_parser_kma |
lib.rs | arithmetic_parser_kma |
version | 0.1.2 |
source | src |
created_at | 2023-11-15 14:59:54.588445 |
updated_at | 2023-11-15 14:59:54.588445 |
description | Arithmetic expression calculator parser. |
homepage | |
repository | |
max_upload_size | |
id | 1036509 |
size | 32,033 |
Arithmetic expression calculator parser.
This parser can be used to parse and calculate arithmetic expressions, including addition (+), subtraction (-), multiplication (*), division (/), and parentheses using operations.
https://crates.io/crates/arithmetic_parser
// This rule describes a valid number, which can be integer or decimal.
number = @{
("0" | ASCII_NONZERO_DIGIT ~ ASCII_DIGIT*)
~ ("." ~ ASCII_DIGIT*)?
}
// This rule represents the unary minus operator.
unary_minus = { "-" }
// This rule represents the primary expression, which can be a number or an enclosed expression.
primary = _{ number | "(" ~ expr ~ ")" }
// This rule represents the atom, which can be a primary expression with an optional unary minus.
atom = _{ unary_minus? ~ primary }
// This rule represents the binary operators, including add, subtract, multiply, and divide.
bin_op = _{ add | subtract | multiply | divide }
add = { "+" }
subtract = { "-" }
multiply = { "*" }
divide = { "/" }
// This rule represents the overall expression, composed of atoms and binary operators.
expr = { atom ~ (bin_op ~ atom)* }
// This rule represents an equation, starting and ending with specific markers and having an expression in between.
equation = _{ SOI ~ expr ~ EOI }
// This rule defines whitespace as a space character.
WHITESPACE = _{ " " }
To run parset in console mode, please, run in command prompt next commands.
make pretty run_console
To run parset in file calculation mode, please, run in command prompt next commands.
make pretty run_file file=<your_file_path_here>
The code defines a parser for arithmetic expressions using the Pratt parsing algorithm.
The parse_expr function takes a sequence of tokens as input and parses it into an abstract syntax tree representing the expression. It uses the PrattParser to do this, which is initialized in a lazy_static block. The PrattParser handles the order of operations and builds the expression tree accordingly.
After the expression is parsed, the eval_expr function evaluates the expression represented by the abstract syntax tree and returns the result. This involves recursively evaluating sub-expressions and performing the appropriate arithmetic operations.
Overall, this code allows you to parse and evaluate arithmetic expressions by first converting them into a structured form and then computing their values.