Crate stasko_calculator_parser

Crate stasko_calculator_parser 

Source
Expand description

§Calculator Parser

§Граматика Парсера

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

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

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

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

Structs§

CalculatorParser

Enums§

CalculatorError
Кастомні помилки
ExprAst
Структура абстрактного дерева
Op
Оператори, які підтримує калькулятор
Rule

Functions§

build_ast
Головна функція, що перетворює вхідний рядок на AST
build_ast_from_pair
Рекурсивна функція для побудови AST з pest::Pair
build_left_assoc
Допоміжна функція для згортання ліво-асоціативних правил