stasko_calculator_parser 1.0.1

Парсер для обробки складних математичних виразів
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(32) Результат: 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