more commands

This commit is contained in:
MeexReay 2024-07-27 22:56:48 +03:00
parent 6f201024dd
commit 85fbe7419b
2 changed files with 55 additions and 12 deletions

View File

@ -34,14 +34,13 @@ WRITE text cout
| `COPY_VAR` | `source_var`, `target_var` | Скопировать значение переменной с `source_var` в `target_var` | | `COPY_VAR` | `source_var`, `target_var` | Скопировать значение переменной с `source_var` в `target_var` |
| `DROP_VAR` | `name_var` | Дропнуть переменную `name_var` | | `DROP_VAR` | `name_var` | Дропнуть переменную `name_var` |
| `HAS_VAR` | `name_var`, `result_var` | В переменную `result_var` записывается `bool` существует ли переменная `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_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_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_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` | | `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_STR` | `str_var`, `start_index`, `end_index` | Сделать подстроку из строки `str_var` и сохранить туда же |
| `SUB_LIST` | `list_var`, `start_index`, `end_index` | Сделать подсписок из списка `list_var` и сохранить туда же | | `SUB_LIST` | `list_var`, `start_index`, `end_index` | Сделать подсписок из списка `list_var` и сохранить туда же |
| `UNPACK_OPTIONAL` | `optional_var`, `result_var` | Достать данные из `optional_var` и установить в `result_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` | `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_MAP` | `func(any, any)`, `map_var` | Функция `func` вызывается для каждого `key`, `value` переменной `map_var` |
| `FOR_LIST` | `func(any)`, `list_var` | Функция `func` вызывается для каждого предмета переменной `list_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` | | `WHILE` | `func -> bool` | Функция `func` (с результатом `bool`) вызывается, пока функция выдает `true` |
### Работа со стримами ### Работа со стримами

View File

@ -595,9 +595,9 @@ pub enum CommandType {
/// Скопировать строку `str_var` в `result_var`, переводя в `list[char]` /// Скопировать строку `str_var` в `result_var`, переводя в `list[char]`
/// ///
/// Название: TO_BYTES \ /// Название: TO_CHARS \
/// Параметры: `source_var`, `result_var` /// Параметры: `source_var`, `result_var`
ToBytes, ToChars,
/// Скопировать строку `source_var` (тип переменной: `string`/`integer`) в `result_var`, переводя в `char` /// Скопировать строку `source_var` (тип переменной: `string`/`integer`) в `result_var`, переводя в `char`
/// ///
@ -659,12 +659,6 @@ pub enum CommandType {
/// Параметры: `list_var`, `start_index`, `end_index` /// Параметры: `list_var`, `start_index`, `end_index`
SubList, SubList,
/// Получить размер списка и записать в переменную `result_var` типа `int`
///
/// Название: LIST_SIZE \
/// Параметры: `list_var`, `result_var`
ListSize,
/// Вывести переменную `name_var` в `stream_var` /// Вывести переменную `name_var` в `stream_var`
/// ///
/// Название: WRITE \ /// Название: WRITE \
@ -842,6 +836,30 @@ pub enum CommandType {
/// Название: UNPACK_OPTIONAL \ /// Название: UNPACK_OPTIONAL \
/// Параметры: `optional_var`, `result_var` /// Параметры: `optional_var`, `result_var`
UnpackOptional, 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 { impl CommandType {
@ -855,7 +873,7 @@ impl CommandType {
"DROP_VAR" => Ok(CommandType::DropVar), "DROP_VAR" => Ok(CommandType::DropVar),
"HAS_VAR" => Ok(CommandType::HasVar), "HAS_VAR" => Ok(CommandType::HasVar),
"TO_STRING" => Ok(CommandType::ToString), "TO_STRING" => Ok(CommandType::ToString),
"TO_BYTES" => Ok(CommandType::ToBytes), "TO_CHARS" => Ok(CommandType::ToChars),
"TO_INTEGER" => Ok(CommandType::ToInteger), "TO_INTEGER" => Ok(CommandType::ToInteger),
"TO_FLOAT" => Ok(CommandType::ToFloat), "TO_FLOAT" => Ok(CommandType::ToFloat),
"TO_CHAR" => Ok(CommandType::ToChar), "TO_CHAR" => Ok(CommandType::ToChar),
@ -867,12 +885,15 @@ impl CommandType {
"SUB_STR" => Ok(CommandType::SubStr), "SUB_STR" => Ok(CommandType::SubStr),
"SUB_LIST" => Ok(CommandType::SubList), "SUB_LIST" => Ok(CommandType::SubList),
"LIST_SIZE" => Ok(CommandType::ListSize), "LIST_SIZE" => Ok(CommandType::ListSize),
"MAP_SIZE" => Ok(CommandType::MapSize),
"STRING_SIZE" => Ok(CommandType::StringSize),
"WRITE" => Ok(CommandType::Write), "WRITE" => Ok(CommandType::Write),
"READ" => Ok(CommandType::Read), "READ" => Ok(CommandType::Read),
"READ_ALL" => Ok(CommandType::ReadAll), "READ_ALL" => Ok(CommandType::ReadAll),
"FOR" => Ok(CommandType::For), "FOR" => Ok(CommandType::For),
"FOR_MAP" => Ok(CommandType::ForMap), "FOR_MAP" => Ok(CommandType::ForMap),
"FOR_LIST" => Ok(CommandType::ForList), "FOR_LIST" => Ok(CommandType::ForList),
"FOR_STRING" => Ok(CommandType::ForString),
"WHILE" => Ok(CommandType::While), "WHILE" => Ok(CommandType::While),
"OPEN_FILE_IN" => Ok(CommandType::OpenFileIn), "OPEN_FILE_IN" => Ok(CommandType::OpenFileIn),
"OPEN_FILE_OUT" => Ok(CommandType::OpenFileOut), "OPEN_FILE_OUT" => Ok(CommandType::OpenFileOut),
@ -896,6 +917,7 @@ impl CommandType {
"HAS_KEY" => Ok(CommandType::HasKey), "HAS_KEY" => Ok(CommandType::HasKey),
"HAS_VALUE" => Ok(CommandType::HasValue), "HAS_VALUE" => Ok(CommandType::HasValue),
"HAS_OPTIONAL" => Ok(CommandType::HasOptional), "HAS_OPTIONAL" => Ok(CommandType::HasOptional),
"UNPACK_OPTIONAL" => Ok(CommandType::UnpackOptional),
_ => Err(ScriptError::CommandUnknownError(line)), _ => Err(ScriptError::CommandUnknownError(line)),
} }
} }
@ -1478,7 +1500,7 @@ impl RunningScript {
// TODO: write logic // TODO: write logic
} }
CommandType::ToBytes => { CommandType::ToChars => {
let source_var = command.args[0].clone(); let source_var = command.args[0].clone();
let result_var = command.args[1].clone(); let result_var = command.args[1].clone();
@ -1547,6 +1569,18 @@ impl RunningScript {
// TODO: write logic // 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 => { CommandType::Read => {
let name_var = command.args[0].clone(); let name_var = command.args[0].clone();
let size_var = command.args[1].clone(); let size_var = command.args[1].clone();
@ -1572,6 +1606,12 @@ impl RunningScript {
// TODO: write logic // TODO: write logic
} }
CommandType::ForString => {
let func_name = command.args[0].clone();
let string_var = command.args[1].clone();
// TODO: write logic
}
CommandType::While => { CommandType::While => {
let func_name = command.args[0].clone(); let func_name = command.args[0].clone();