| Crates.io | catnukh_matrix_parser |
| lib.rs | catnukh_matrix_parser |
| version | 0.1.0 |
| created_at | 2025-11-11 22:27:32.072862+00 |
| updated_at | 2025-11-11 22:27:32.072862+00 |
| description | Matrix operations parser for eeducational purpose |
| homepage | https://github.com/catnukh/catnukh_matrix_parser |
| repository | https://github.com/catnukh/catnukh_matrix_parser |
| max_upload_size | |
| id | 1928295 |
| size | 38,952 |
catnukh_matrix_parser - парсер для виконання операцій над матрицями, такими як: додавання, віднімання, множення на скаляр та множення двох матриць між собою
Початково дані читаються з файлу .txt за допомого парсера pest, який використовує правила граматики визначені в src/matrix.pest
pest, що будує "дерево" ідентифікуючи команди, які необхідно виконати (add, subtract, mult...) та ігногуючи COMMENT і WHITESPACEsrc/lib.rs проходить по цьому дереву та перетворює його на структурований список команд Vec<Command>src/main.rs отримує Vec<Command>HashMap<String, Matrix> для зберігання всіх визначених матриць за їхїніми іменамиVec<Command> звертаючись до HashMap для отримання матриць та виводу результату в консольgit clone у консолі
git clone
cd catnukh_matrix_parser
cargo test
cargo test
src/matrix.pest)WHITESPACE = _{ " " | "\n" | "\t" | "\r" }
COMMENT = _{ "#" ~ (!"\n" ~ ANY)* }
number = { "-"? ~ ('0'..'9')+ ~ ("." ~ ('0'..'9')+)? ~ !(ASCII_ALPHA | ".") }
name_of_matrix = { (ASCII_ALPHA | "_") ~ (ASCII_ALPHANUMERIC | "_")* }
row = { "[" ~ number ~ ("," ~ number)* ~ "]" }
matrix = { "[" ~ row ~ ("," ~ row)* ~ "]" }
mat_def = { "mat" ~ name_of_matrix ~ "=" ~ matrix }
add = { "add" ~ name_of_matrix ~ "," ~ name_of_matrix }
subtract = { "sub" ~ name_of_matrix ~ "," ~ name_of_matrix }
mult = { "mul" ~ name_of_matrix ~ "," ~ name_of_matrix }
scale = { "scale" ~ name_of_matrix ~ "," ~ number }
operation = { mat_def | add | subtract | mult | scale }
file = { SOI ~ operation* ~ EOI }