catnukh_matrix_parser

Crates.iocatnukh_matrix_parser
lib.rscatnukh_matrix_parser
version0.1.0
created_at2025-11-11 22:27:32.072862+00
updated_at2025-11-11 22:27:32.072862+00
descriptionMatrix operations parser for eeducational purpose
homepagehttps://github.com/catnukh/catnukh_matrix_parser
repositoryhttps://github.com/catnukh/catnukh_matrix_parser
max_upload_size
id1928295
size38,952
Nych Kateryna (catnukh)

documentation

https://docs.rs/catnukh_matrix_parser

README

catnukh_matrix_parser

catnukh_matrix_parser - парсер для виконання операцій над матрицями, такими як: додавання, віднімання, множення на скаляр та множення двох матриць між собою

Технічний опис

Початково дані читаються з файлу .txt за допомого парсера pest, який використовує правила граматики визначені в src/matrix.pest

Етапи парсингу

  1. Розпінавання тексту з файлу на конкретну дію, тобто визначення матриці, додавання матриць і так далі. Це відбувається за допомогою pest, що будує "дерево" ідентифікуючи команди, які необхідно виконати (add, subtract, mult...) та ігногуючи COMMENT і WHITESPACE
  2. Код в src/lib.rs проходить по цьому дереву та перетворює його на структурований список команд Vec<Command>

Використання результатів

  1. CLI-додаток, тобто src/main.rs отримує Vec<Command>
  2. Створюється HashMap<String, Matrix> для зберігання всіх визначених матриць за їхїніми іменами
  3. Програма по черзі виконує команди з Vec<Command> звертаючись до HashMap для отримання матриць та виводу результату в консоль

Як клонувати собі репозиторій

  1. Ввести команду git clone у консолі
    git clone
    
  2. Перейдіть у щойно створену папку
    cd catnukh_matrix_parser
    
  3. Запуск тестів. Для цього необхідно виконати команду 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 }
Commit count: 0

cargo fmt