1 unstable release
new 0.1.1 | Nov 20, 2024 |
---|---|
0.1.0 |
|
#805 in Parser implementations
9KB
67 lines
Morse Code Parser
Morse Code Parser — це інструмент для парсингу та декодування тексту, закодованого в код Морзе, реалізований на мові програмування Rust.
Опис проєкту
Цей проєкт був створений як демонстрація можливостей роботи з текстовими граматиками та парсингом у Rust за допомогою бібліотеки Pest. Програма дозволяє:
- Парсити код Морзе: визначати його структуру та компоненти.
- Декодувати код Морзе у зрозумілий текст.
- Валідувати введення: перевіряти, чи є вхідні дані допустимими для парсера.
Основні функції
- Парсинг коду Морзе: Вхідний рядок парситься відповідно до граматики, визначеної у файлі
grammar.pest
. Результат — структура, яка відображає компоненти коду Морзе. - Декодування: Перетворює закодований текст у зрозумілий людський текст (A-Z, 0-9). Невідомі символи замінюються на
?
. - Валідація: Перевіряє введення на наявність некоректних символів, таких як літери або спеціальні символи.
Як запустити
- Клонувати репозиторій:
git clone https://github.com/yourusername/morse_code_parser.git
cd morse_code_parser
- Зібрати проєкт:
cargo build
- Запустити програму:
cargo run
- Запустити тести:
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
Посилання
- Документація (docs.rs): Переглянути документацію
- Crates.io: Сторінка проєкту
Dependencies
~2.2–3MB
~59K SLoC