mirror of
https://github.com/MeexReay/sustlang.git
synced 2025-06-24 10:33:01 +03:00
more commands
This commit is contained in:
parent
6f201024dd
commit
85fbe7419b
@ -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` |
|
||||||
|
|
||||||
### Работа со стримами
|
### Работа со стримами
|
||||||
|
60
src/lib.rs
60
src/lib.rs
@ -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();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user