feat: базовая структура проекта; docs: грамматика формы бэкуса-наура

This commit is contained in:
ShishkaDanil
2026-01-03 19:31:30 +03:00
parent ab2acdc698
commit 06164cff09
20 changed files with 2291 additions and 11 deletions

View File

@@ -0,0 +1,25 @@
//! Интеграционные тесты для токенизатора языка Ъ+.
// TODO: Добавить интеграционные тесты
// - Тест полного цикла токенизации простого примера
// - Тест обработки различных типов токенов в одном файле
// - Тест обработки больших файлов
// - Тест производительности токенизации
#[cfg(test)]
mod tests {
// use tverd_plus_tokenizer::*;
#[test]
fn test_integration_basic() {
// TODO: Реализовать базовый интеграционный тест
// Пример: токенизация простого кода с несколькими типами токенов
}
#[test]
fn test_integration_complex() {
// TODO: Реализовать сложный интеграционный тест
// Пример: токенизация кода с вложенными комментариями и различными идентификаторами
}
}

51
tests/test_comments.rs Normal file
View File

@@ -0,0 +1,51 @@
//! Тесты для вложенных комментариев.
// TODO: Добавить тесты для комментариев
// - Тест простого комментария (<[ комментарий ]>)
// - Тест вложенных комментариев (<[ внешний <[ внутренний ]> внешний ]>)
// - Тест многоуровневой вложенности
// - Тест комментариев с различным содержимым
// - Тест ошибок несоответствия комментариев
// - Тест комментариев в различных позициях кода
#[cfg(test)]
mod tests {
// use tverd_plus_tokenizer::*;
#[test]
fn test_simple_comment() {
// TODO: Тест простого комментария
// Пример: "<[ комментарий ]>"
}
#[test]
fn test_nested_comments() {
// TODO: Тест вложенных комментариев
// Пример: "<[ внешний <[ внутренний ]> внешний ]>"
}
#[test]
fn test_multiple_nesting_levels() {
// TODO: Тест многоуровневой вложенности
// Пример: "<[ 1 <[ 2 <[ 3 ]> 2 ]> 1 ]>"
}
#[test]
fn test_comments_with_content() {
// TODO: Тест комментариев с различным содержимым
// Пример: "<[ комментарий с @символами и операторами |> ]>"
}
#[test]
fn test_unmatched_comment_close() {
// TODO: Тест ошибки несоответствия комментариев
// Пример: "]> без открытия"
}
#[test]
fn test_comments_in_code() {
// TODO: Тест комментариев в различных позициях кода
// Пример: "Ъ+ <[ комментарий ]> @переменная"
}
}

50
tests/test_cyrillic.rs Normal file
View File

@@ -0,0 +1,50 @@
//! Тесты для верификации кириллических идентификаторов.
// TODO: Добавить тесты для кириллических идентификаторов
// - Тест идентификаторов переменных с кириллицей (@переменная)
// - Тест идентификаторов меток с кириллицей (:метка)
// - Тест предикатов с кириллицей (?предикат)
// - Тест смешанных идентификаторов (кириллица + латиница)
// - Тест различных регистров кириллицы (заглавные, строчные, ё/Ё)
#[cfg(test)]
mod tests {
// use tverd_plus_tokenizer::*;
#[test]
fn test_cyrillic_variable_identifier() {
// TODO: Тест идентификатора переменной с кириллицей
// Пример: "@переменная"
}
#[test]
fn test_cyrillic_label_identifier() {
// TODO: Тест идентификатора метки с кириллицей
// Пример: ":метка"
}
#[test]
fn test_cyrillic_predicate_identifier() {
// TODO: Тест предиката с кириллицей
// Пример: "?предикат"
}
#[test]
fn test_mixed_cyrillic_latin() {
// TODO: Тест смешанных идентификаторов
// Пример: "@переменнаяVar"
}
#[test]
fn test_cyrillic_case_sensitivity() {
// TODO: Тест различных регистров кириллицы
// Пример: "@Переменная", "@ПЕРЕМЕННАЯ", "@переменная"
}
#[test]
fn test_cyrillic_yo_letter() {
// TODO: Тест буквы ё/Ё
// Пример: "@пёс", "@ПЁС"
}
}

50
tests/test_latin.rs Normal file
View File

@@ -0,0 +1,50 @@
//! Тесты для верификации латинских идентификаторов.
// TODO: Добавить тесты для латинских идентификаторов
// - Тест идентификаторов переменных с латиницей (@variable)
// - Тест идентификаторов меток с латиницей (:label)
// - Тест предикатов с латиницей (?predicate)
// - Тест смешанного регистра (camelCase, snake_case)
// - Тест цифр в идентификаторах (после первого символа)
#[cfg(test)]
mod tests {
// use tverd_plus_tokenizer::*;
#[test]
fn test_latin_variable_identifier() {
// TODO: Тест идентификатора переменной с латиницей
// Пример: "@variable"
}
#[test]
fn test_latin_label_identifier() {
// TODO: Тест идентификатора метки с латиницей
// Пример: ":label"
}
#[test]
fn test_latin_predicate_identifier() {
// TODO: Тест предиката с латиницей
// Пример: "?predicate"
}
#[test]
fn test_camel_case() {
// TODO: Тест camelCase идентификаторов
// Пример: "@camelCase"
}
#[test]
fn test_snake_case() {
// TODO: Тест snake_case идентификаторов
// Пример: "@snake_case"
}
#[test]
fn test_identifier_with_digits() {
// TODO: Тест идентификаторов с цифрами
// Пример: "@var123", "@var1_2"
}
}

51
tests/test_operators.rs Normal file
View File

@@ -0,0 +1,51 @@
//! Тесты для операторов языка Ъ+.
// TODO: Добавить тесты для операторов
// - Тест оператора начала блока (Ъ+)
// - Тест оператора конца блока (Ъ-)
// - Тест оператора конвейера (|>)
// - Тест оператора записи (<<)
// - Тест позиций операторов
// - Тест комбинаций операторов
#[cfg(test)]
mod tests {
// use tverd_plus_tokenizer::*;
#[test]
fn test_block_start_operator() {
// TODO: Тест оператора начала блока
// Пример: "Ъ+"
}
#[test]
fn test_block_end_operator() {
// TODO: Тест оператора конца блока
// Пример: "Ъ-"
}
#[test]
fn test_pipeline_operator() {
// TODO: Тест оператора конвейера
// Пример: "|>"
}
#[test]
fn test_write_operator() {
// TODO: Тест оператора записи
// Пример: "<<"
}
#[test]
fn test_operator_combinations() {
// TODO: Тест комбинаций операторов
// Пример: "Ъ+ @var |> <<"
}
#[test]
fn test_operator_positions() {
// TODO: Тест отслеживания позиций операторов
// Проверить, что позиции операторов корректно отслеживаются
}
}

51
tests/test_positions.rs Normal file
View File

@@ -0,0 +1,51 @@
//! Тесты для отслеживания позиций токенов.
// TODO: Добавить тесты для отслеживания позиций
// - Тест позиции первого токена
// - Тест позиции после пробелов
// - Тест позиции после новой строки
// - Тест позиции в многострочном коде
// - Тест позиции в комментариях
// - Тест позиции ошибок
#[cfg(test)]
mod tests {
// use tverd_plus_tokenizer::*;
#[test]
fn test_first_token_position() {
// TODO: Тест позиции первого токена
// Проверить, что первый токен имеет позицию (1, 1)
}
#[test]
fn test_position_after_whitespace() {
// TODO: Тест позиции после пробелов
// Пример: " @var" - проверить позицию @var
}
#[test]
fn test_position_after_newline() {
// TODO: Тест позиции после новой строки
// Пример: "\n@var" - проверить, что @var на строке 2
}
#[test]
fn test_multiline_positions() {
// TODO: Тест позиций в многострочном коде
// Пример: "Ъ+\n @var\n :метка"
}
#[test]
fn test_comment_positions() {
// TODO: Тест позиций комментариев
// Проверить, что комментарии имеют корректные позиции
}
#[test]
fn test_error_positions() {
// TODO: Тест позиций ошибок
// Проверить, что ошибки содержат корректные позиции
}
}