From 85fbe7419b0a59cfc5827ae2aa0ad5a7a2ec142b Mon Sep 17 00:00:00 2001 From: MeexReay Date: Sat, 27 Jul 2024 22:56:48 +0300 Subject: [PATCH] more commands --- README.md | 7 +++++-- src/lib.rs | 60 +++++++++++++++++++++++++++++++++++++++++++++--------- 2 files changed, 55 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index c7bce2d..15d64fa 100644 --- a/README.md +++ b/README.md @@ -34,14 +34,13 @@ WRITE text cout | `COPY_VAR` | `source_var`, `target_var` | Скопировать значение переменной с `source_var` в `target_var` | | `DROP_VAR` | `name_var` | Дропнуть переменную `name_var` | | `HAS_VAR` | `name_var`, `result_var` | В переменную `result_var` записывается `bool` существует ли переменная `name_var` | -| `LIST_SIZE` | `list_var`, `result_var` | Получить размер списка и записать в переменную `result_var` типа `int` | ### Преобразование переменных | Команда | Параметры | Описание | |--------------------------|------------|-------------| | `TO_STRING` | `source_var`, `result_var` | Скопировать значение переменной с `source_var` в `result_var`, переводя в `string` | -| `TO_BYTES` | `str_var`, `result_var` | Скопировать строку `str_var` в `result_var`, переводя в `list[char]` | +| `TO_CHARS` | `str_var`, `result_var` | Скопировать строку `str_var` в `result_var`, переводя в `list[char]` | | `TO_INTEGER` | `source_var`, `result_var` | Скопировать строку `source_var` (тип переменной: `string`/`char`) в `result_var`, переводя в `integer` | | `TO_CHAR` | `source_var`, `result_var` | Скопировать строку `source_var` (тип переменной: `string`/`integer`) в `result_var`, переводя в `char` | | `TO_BOOL` | `source_var`, `result_var` | Скопировать строку `source_var` (тип переменной: `string`/`integer`) в `result_var`, переводя в `bool` | @@ -53,6 +52,9 @@ WRITE text cout | `SUB_STR` | `str_var`, `start_index`, `end_index` | Сделать подстроку из строки `str_var` и сохранить туда же | | `SUB_LIST` | `list_var`, `start_index`, `end_index` | Сделать подсписок из списка `list_var` и сохранить туда же | | `UNPACK_OPTIONAL` | `optional_var`, `result_var` | Достать данные из `optional_var` и установить в `result_var` | +| `LIST_SIZE` | `list_var`, `result_var` | Получить размер списка и записать в переменную `result_var` типа `int` | +| `STRING_SIZE` | `string_var`, `result_var` | Получить размер строки и записать в переменную `result_var` типа `int` | +| `MAP_SIZE` | `map_var`, `result_var` | Получить размер мапы и записать в переменную `result_var` типа `int` | ### Циклы @@ -61,6 +63,7 @@ WRITE text cout | `FOR` | `func(int)`, `start_index`, `end_index` | Функция `func` (с единственным аргументом с типом `int`) вызывается с `start_index` до `end_index` включительно, `start_index` и `end_index` это названия переменных | | `FOR_MAP` | `func(any, any)`, `map_var` | Функция `func` вызывается для каждого `key`, `value` переменной `map_var` | | `FOR_LIST` | `func(any)`, `list_var` | Функция `func` вызывается для каждого предмета переменной `list_var` | +| `FOR_STRING` | `func(char)`, `string_var` | Функция `func` вызывается для каждого символа строки `string_var` | | `WHILE` | `func -> bool` | Функция `func` (с результатом `bool`) вызывается, пока функция выдает `true` | ### Работа со стримами diff --git a/src/lib.rs b/src/lib.rs index deda924..190df32 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -595,9 +595,9 @@ pub enum CommandType { /// Скопировать строку `str_var` в `result_var`, переводя в `list[char]` /// - /// Название: TO_BYTES \ + /// Название: TO_CHARS \ /// Параметры: `source_var`, `result_var` - ToBytes, + ToChars, /// Скопировать строку `source_var` (тип переменной: `string`/`integer`) в `result_var`, переводя в `char` /// @@ -659,12 +659,6 @@ pub enum CommandType { /// Параметры: `list_var`, `start_index`, `end_index` SubList, - /// Получить размер списка и записать в переменную `result_var` типа `int` - /// - /// Название: LIST_SIZE \ - /// Параметры: `list_var`, `result_var` - ListSize, - /// Вывести переменную `name_var` в `stream_var` /// /// Название: WRITE \ @@ -842,6 +836,30 @@ pub enum CommandType { /// Название: UNPACK_OPTIONAL \ /// Параметры: `optional_var`, `result_var` UnpackOptional, + + /// Получить размер списка и записать в переменную `result_var` типа `int` + /// + /// Название: LIST_SIZE \ + /// Параметры: `list_var`, `result_var` + ListSize, + + /// Получить размер строки и записать в переменную `result_var` типа `int` + /// + /// Название: MAP_SIZE \ + /// Параметры: `map_var`, `result_var` + MapSize, + + /// Получить размер мапы и записать в переменную `result_var` типа `int` + /// + /// Название: STRING_SIZE \ + /// Параметры: `string_var`, `result_var` + StringSize, + + /// Функция `func` вызывается для каждого символа строки `string_var` + /// + /// Название: FOR_STRING \ + /// Параметры: `func(char)`, `string_var` + ForString, } impl CommandType { @@ -855,7 +873,7 @@ impl CommandType { "DROP_VAR" => Ok(CommandType::DropVar), "HAS_VAR" => Ok(CommandType::HasVar), "TO_STRING" => Ok(CommandType::ToString), - "TO_BYTES" => Ok(CommandType::ToBytes), + "TO_CHARS" => Ok(CommandType::ToChars), "TO_INTEGER" => Ok(CommandType::ToInteger), "TO_FLOAT" => Ok(CommandType::ToFloat), "TO_CHAR" => Ok(CommandType::ToChar), @@ -867,12 +885,15 @@ impl CommandType { "SUB_STR" => Ok(CommandType::SubStr), "SUB_LIST" => Ok(CommandType::SubList), "LIST_SIZE" => Ok(CommandType::ListSize), + "MAP_SIZE" => Ok(CommandType::MapSize), + "STRING_SIZE" => Ok(CommandType::StringSize), "WRITE" => Ok(CommandType::Write), "READ" => Ok(CommandType::Read), "READ_ALL" => Ok(CommandType::ReadAll), "FOR" => Ok(CommandType::For), "FOR_MAP" => Ok(CommandType::ForMap), "FOR_LIST" => Ok(CommandType::ForList), + "FOR_STRING" => Ok(CommandType::ForString), "WHILE" => Ok(CommandType::While), "OPEN_FILE_IN" => Ok(CommandType::OpenFileIn), "OPEN_FILE_OUT" => Ok(CommandType::OpenFileOut), @@ -896,6 +917,7 @@ impl CommandType { "HAS_KEY" => Ok(CommandType::HasKey), "HAS_VALUE" => Ok(CommandType::HasValue), "HAS_OPTIONAL" => Ok(CommandType::HasOptional), + "UNPACK_OPTIONAL" => Ok(CommandType::UnpackOptional), _ => Err(ScriptError::CommandUnknownError(line)), } } @@ -1478,7 +1500,7 @@ impl RunningScript { // TODO: write logic } - CommandType::ToBytes => { + CommandType::ToChars => { let source_var = command.args[0].clone(); let result_var = command.args[1].clone(); @@ -1547,6 +1569,18 @@ impl RunningScript { // TODO: write logic } + CommandType::MapSize => { + let map_var = command.args[0].clone(); + let result_var = command.args[1].clone(); + + // TODO: write logic + } + CommandType::StringSize => { + let string_var = command.args[0].clone(); + let result_var = command.args[1].clone(); + + // TODO: write logic + } CommandType::Read => { let name_var = command.args[0].clone(); let size_var = command.args[1].clone(); @@ -1572,6 +1606,12 @@ impl RunningScript { // TODO: write logic } + CommandType::ForString => { + let func_name = command.args[0].clone(); + let string_var = command.args[1].clone(); + + // TODO: write logic + } CommandType::While => { let func_name = command.args[0].clone();