stasko_calculator_parser

Crates.iostasko_calculator_parser
lib.rsstasko_calculator_parser
version1.0.4
created_at2025-11-05 21:15:06.599887+00
updated_at2025-11-16 23:10:59.053239+00
descriptionПарсер для обробки складних математичних виразів
homepage
repository
max_upload_size
id1918646
size25,859
(TarasStasko)

documentation

README

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)
Результат: 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

Commit count: 0

cargo fmt