# Morse Code Parser
**Morse Code Parser** — це інструмент для парсингу та декодування тексту, закодованого в код Морзе, реалізований на мові програмування Rust.
## Опис проєкту
Цей проєкт був створений як демонстрація можливостей роботи з текстовими граматиками та парсингом у Rust за допомогою бібліотеки [Pest](https://pest.rs). Програма дозволяє:
- Парсити код Морзе: визначати його структуру та компоненти.
- Декодувати код Морзе у зрозумілий текст.
- Валідувати введення: перевіряти, чи є вхідні дані допустимими для парсера.
## Основні функції
1. **Парсинг коду Морзе**: Вхідний рядок парситься відповідно до граматики, визначеної у файлі `grammar.pest`. Результат — структура, яка відображає компоненти коду Морзе.
2. **Декодування**: Перетворює закодований текст у зрозумілий людський текст (A-Z, 0-9). Невідомі символи замінюються на `?`.
3. **Валідація**: Перевіряє введення на наявність некоректних символів, таких як літери або спеціальні символи.
## Як запустити
1. Клонувати репозиторій:
```bash
git clone https://github.com/yourusername/morse_code_parser.git
cd morse_code_parser
```
2. Зібрати проєкт:
```bash
cargo build
```
3. Запустити програму:
```bash
cargo run
```
4. Запустити тести:
```bash
cargo test
```
## Приклади використання
### Парсинг та декодування
```rust
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);
}
```
Результат:
```bash
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)* }
```
## Тестове покриття
Проєкт має понад **50 тестів**, які перевіряють:
- Валідність введення.
- Парсинг різних комбінацій символів.
- Декодування з відомими та невідомими символами.
- Крайні випадки, включаючи пусті рядки та довгі текстові блоки.
Для запуску тестів:
```bash
cargo test
```
## Посилання на документацію та crates.io
- **Документація (docs.rs)**: [Переглянути документацію](https://docs.rs/morse_code_parser)
- **Crates.io**: [Сторінка проєкту](https://crates.io/crates/morse_code_parser)
```