| Crates.io | stasko_calculator_parser |
| lib.rs | stasko_calculator_parser |
| version | 1.0.4 |
| created_at | 2025-11-05 21:15:06.599887+00 |
| updated_at | 2025-11-16 23:10:59.053239+00 |
| description | Парсер для обробки складних математичних виразів |
| homepage | |
| repository | |
| max_upload_size | |
| id | 1918646 |
| size | 25,859 |
calculator_parser — це парсер для обробки складних математичних виразів. Він перетворює вхідний рядок у абстрактне синтаксичне дерево (AST) і потім обчислює його для отримання результату.
Парсер підтримує:
+, -, *, /, ^2^3^2 = 2^(3^2) = 512)cargo run -- --help або make helpcargo run -- --credits або make creditscargo run або make run2^(3^2)
Результат: 512
2^(23 - (1 + 20)) + 2
Результат: 6
(2 * 3)/(23 - (1 + 20)) + 1
Результат: 4
/// Ігноруємо пробіли, табуляцію та нові рядки.
WHITESPACE = _{ " " | "\t" | "\n" }
/// Коректне число — це послідовність ASCII цифр
int = @{ ASCII_DIGIT+ }
/// Оператор додавання
add = { "+" }
/// Оператор віднімання
subtract = { "-" }
/// Оператор множення
multiply = { "*" }
/// Оператор ділення
divide = { "/" }
/// Оператор піднесення до степеня
power = { "^" }
/// primary - це числа або вирази в дужках.
primary = { int | "(" ~ expr ~ ")" }
/// factor - обробляє унарні оператори(унарний мінус)
factor = { (subtract)? ~ power_term }
/// power_term - обробляє піднесення до степеня (право-асоціативне, тобто 2 ^ 3 ^ 2 -> 2 ^ (3 ^ 2))
power_term = { primary ~ (power ~ factor)* }
/// expr - обробляє додавання та віднімання (ліво-асоціативне, тобто 10 - 5 + 2 -> (10 - 5) + 2)
expr = { term ~ ((add | subtract) ~ term)* }
/// term - обробляє множення та ділення (ліво-асоціативне)
term = { factor ~ ((multiply | divide) ~ factor)* }
/// expression - кореневе правило, expr має покрити весь вхід
expression = { SOI ~ expr ~ EOI }
https://crates.io/crates/stasko_calculator_parser
https://docs.rs/stasko_calculator_parser