stasko_calculator_parser 1.1.2

Парсер для обробки складних математичних виразів
Documentation
# calculator_parser


calculator_parser — це парсер для обробки складних математичних виразів. Він перетворює вхідний рядок у абстрактне синтаксичне дерево (AST) і потім обчислює його для отримання результату.

Парсер підтримує:
* Цілі числа (включаючи унарний мінус)
* Оператори: `+`, `-`, `*`, `/`, `^`
* Обробку дужок
* Коректний пріоритет операцій
* Право-асоціативне піднесення до степеня (`2^3^2` = `2^(3^2)` = 512)

## Команди


* Показати всі команди: `cargo run -- --help` або `make help`
* Показати credits: `cargo run -- --credits` або `make credits`
* Запустити інтерактивний режим: `cargo run` або `make run`

## Приклади роботи


2^(3^2)<br>
Результат: 512

2^(23 - (1 + 20)) + 2<br>
Результат: 6

(2 * 3)/(23 - (1 + 20)) + 1<br>
Результат: 4

## Граматика парсера


/// Ігноруємо пробіли, табуляцію та нові рядки.<br>
WHITESPACE = _{ " " | "\t" | "\n" }

/// Коректне число — це послідовність ASCII цифр<br>
int = @{ ASCII_DIGIT+ }

/// Оператор додавання<br>
add = { "+" }<br>
/// Оператор віднімання<br>
subtract = { "-" }<br>
/// Оператор множення<br>
multiply = { "*" }<br>
/// Оператор ділення<br>
divide = { "/" }<br>
/// Оператор піднесення до степеня<br>
power = { "^" }<br>

/// `primary` - це числа або вирази в дужках.<br>
primary = { int | "(" ~ expr ~ ")" }<br>
/// `factor` - обробляє унарні оператори(унарний мінус)<br>
factor = { (subtract)? ~ power_term }<br>
/// `power_term` - обробляє піднесення до степеня (право-асоціативне, тобто `2 ^ 3 ^ 2` -> `2 ^ (3 ^ 2)`)<br>
power_term = { primary ~ (power ~ factor)* }<br>
/// `expr` - обробляє додавання та віднімання (ліво-асоціативне, тобто `10 - 5 + 2` -> `(10 - 5) + 2`)<br>
expr = { term ~ ((add | subtract) ~ term)* }<br>
/// `term` - обробляє множення та ділення (ліво-асоціативне)<br>
term = { factor ~ ((multiply | divide) ~ factor)* }<br>
/// `expression` - кореневе правило, `expr` має покрити весь вхід<br>
expression = { SOI ~ expr ~ EOI }<br>

## Крейт

https://crates.io/crates/stasko_calculator_parser<br>
https://docs.rs/stasko_calculator_parser