#morse #parser #rust

bin+lib morse_code_parser

A Morse code parser and decoder implemented in Rust

1 unstable release

new 0.1.1 Nov 20, 2024
0.1.0 Nov 20, 2024

#805 in Parser implementations

MIT license

9KB
67 lines

Morse Code Parser

Morse Code Parser — це інструмент для парсингу та декодування тексту, закодованого в код Морзе, реалізований на мові програмування Rust.

Опис проєкту

Цей проєкт був створений як демонстрація можливостей роботи з текстовими граматиками та парсингом у Rust за допомогою бібліотеки Pest. Програма дозволяє:

  • Парсити код Морзе: визначати його структуру та компоненти.
  • Декодувати код Морзе у зрозумілий текст.
  • Валідувати введення: перевіряти, чи є вхідні дані допустимими для парсера.

Основні функції

  1. Парсинг коду Морзе: Вхідний рядок парситься відповідно до граматики, визначеної у файлі grammar.pest. Результат — структура, яка відображає компоненти коду Морзе.
  2. Декодування: Перетворює закодований текст у зрозумілий людський текст (A-Z, 0-9). Невідомі символи замінюються на ?.
  3. Валідація: Перевіряє введення на наявність некоректних символів, таких як літери або спеціальні символи.

Як запустити

  1. Клонувати репозиторій:
git clone https://github.com/yourusername/morse_code_parser.git
cd morse_code_parser
  1. Зібрати проєкт:
cargo build
  1. Запустити програму:
cargo run
  1. Запустити тести:
cargo test

Приклади використання

Парсинг та декодування

use morse_code_parser::{parse_morse_code, decode_morse};

fn main() {
    let morse_input = "... --- ... / - .... .. ... / .. ... / - . ... -";
    
    // Парсинг
    parse_morse_code(morse_input).unwrap();
    
    // Декодування
    let decoded = decode_morse(morse_input).unwrap();
    println!("Decoded text: {}", decoded);
}

Результат:

Parsed structure:
...
Decoded text: SOS THIS IS TEST

Граматика коду Морзе

Файл grammar.pest:

WHITESPACE = _{ " " | "\t" | "\n" }

morse_char = { "." | "-" }
morse_letter = @{ morse_char+ }
morse_word = { morse_letter ~ (" " ~ morse_letter)* }
morse_code = { morse_word ~ (" / " ~ morse_word)* }

Тестове покриття

Проєкт має понад 34 тести, які перевіряють:

  • Валідність введення.
  • Парсинг різних комбінацій символів.
  • Декодування з відомими та невідомими символами.
  • Крайні випадки, включаючи пусті рядки та довгі текстові блоки.

Для запуску тестів:

cargo test

Посилання

Dependencies

~2.2–3MB
~59K SLoC