refactor maybe

This commit is contained in:
MeexReay 2024-07-27 22:44:04 +03:00
parent 842ef24a60
commit 6f201024dd
3 changed files with 243 additions and 60 deletions

View File

@ -52,6 +52,7 @@ WRITE text cout
| `ADD_STR` | `str_var`, `value_var` | Прибавить к строке `str_var` значение `value_var` (может быть типа `string/char/list[char]`) | | `ADD_STR` | `str_var`, `value_var` | Прибавить к строке `str_var` значение `value_var` (может быть типа `string/char/list[char]`) |
| `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` |
### Циклы ### Циклы
@ -67,10 +68,8 @@ WRITE text cout
| Команда | Параметры | Описание | | Команда | Параметры | Описание |
|--------------------------|------------|-------------| |--------------------------|------------|-------------|
| `WRITE` | `name_var`, `stream_var` | Вывести переменную `name_var` в `stream_var` | | `WRITE` | `name_var`, `stream_var` | Вывести переменную `name_var` в `stream_var` |
| `READ` | `name_var`, `size_var`, `stream_var` | Прочитать с `stream_var` ровно `size_var` байтов в переменную `name_var` типа `list[char]` | | `READ` | `name_var`, `size_var`, `stream_var` | Прочитать с `stream_var` ровно `size_var` байтов в переменную `name_var` типа `list[char]`/`string` |
| `READ_ALL` | `name_var`, `stream_var` | Прочитать с `stream_var` все имеющиеся байты в переменную `name_var` типа `list[char]` | | `READ_ALL` | `name_var`, `stream_var` | Прочитать с `stream_var` все имеющиеся байты в переменную `name_var` типа `list[char]`/`string` |
| `READ_STR` | `name_var`, `size_var`, `stream_var` | Прочитать с `stream_var` ровно `size_var` байтов в переменную `name_var` типа `string` |
| `READ_STR_ALL` | `name_var`, `stream_var` | Прочитать с `stream_var` все имеющиеся байты в переменную `name_var` типа `string` |
| `OPEN_FILE_IN` | `path_var`, `stream_var` | Открыть файл по пути `path_var` (`path_var`, `stream_var` - переменные) для чтения и записать стрим для чтения в переменную `stream_var` | | `OPEN_FILE_IN` | `path_var`, `stream_var` | Открыть файл по пути `path_var` (`path_var`, `stream_var` - переменные) для чтения и записать стрим для чтения в переменную `stream_var` |
| `OPEN_FILE_OUT` | `path_var`, `stream_var` | Открыть файл по пути `path_var` (`path_var`, `stream_var` - переменные) для записи и записать стрим для записи в переменную `stream_var` | | `OPEN_FILE_OUT` | `path_var`, `stream_var` | Открыть файл по пути `path_var` (`path_var`, `stream_var` - переменные) для записи и записать стрим для записи в переменную `stream_var` |
| `OPEN_TCP_CONNECTION` | `addr_var`, `port_var`, `in_stream`, `out_stream` | Подключиться по `addr_var:port_var` (`addr_var: string`, `port_var: int`, `in_stream: in_stream`, `out_stream: out_stream` - переменные) и записать стримы для чтения и записи в `in_stream` и `out_stream` | | `OPEN_TCP_CONNECTION` | `addr_var`, `port_var`, `in_stream`, `out_stream` | Подключиться по `addr_var:port_var` (`addr_var: string`, `port_var: int`, `in_stream: in_stream`, `out_stream: out_stream` - переменные) и записать стримы для чтения и записи в `in_stream` и `out_stream` |

View File

@ -683,18 +683,6 @@ pub enum CommandType {
/// Параметры: `name_var`, `stream_var` /// Параметры: `name_var`, `stream_var`
ReadAll, ReadAll,
/// Прочитать с `stream_var` ровно `size_var` байтов в переменную `name_var` типа `string`
///
/// Название: READ_STR \
/// Параметры: `name_var`, `size_var`, `stream_var`
ReadStr,
/// Прочитать с `stream_var` все имеющиеся байты в переменную `name_var` типа `string`
///
/// Название: READ_STR_ALL \
/// Параметры: `name_var`, `stream_var`
ReadStrAll,
/// Функция `func` (с единственным аргументом с типом `int`) вызывается с `start_index` до `end_index` включительно, `start_index` и `end_index` это названия переменных /// Функция `func` (с единственным аргументом с типом `int`) вызывается с `start_index` до `end_index` включительно, `start_index` и `end_index` это названия переменных
/// ///
/// Название: FOR \ /// Название: FOR \
@ -848,6 +836,12 @@ pub enum CommandType {
/// Название: HAS_OPTIONAL \ /// Название: HAS_OPTIONAL \
/// Параметры: `optional_var`, `result_var` /// Параметры: `optional_var`, `result_var`
HasOptional, HasOptional,
/// Достать данные из `optional_var` и установить в `result_var`
///
/// Название: UNPACK_OPTIONAL \
/// Параметры: `optional_var`, `result_var`
UnpackOptional,
} }
impl CommandType { impl CommandType {
@ -876,8 +870,6 @@ impl CommandType {
"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),
"READ_STR" => Ok(CommandType::ReadStr),
"READ_STR_ALL" => Ok(CommandType::ReadStrAll),
"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),
@ -1480,43 +1472,237 @@ impl RunningScript {
)?; )?;
} }
} }
CommandType::ToString => {} CommandType::ToString => {
CommandType::ToBytes => {} let source_var = command.args[0].clone();
CommandType::ToInteger => {} let result_var = command.args[1].clone();
CommandType::ToFloat => {}
CommandType::ToBool => {} // TODO: write logic
CommandType::ToChar => {} }
CommandType::GetSymbol => {} CommandType::ToBytes => {
CommandType::AddInt => {} let source_var = command.args[0].clone();
CommandType::AddFloat => {} let result_var = command.args[1].clone();
CommandType::SubStr => {}
CommandType::SubList => {} // TODO: write logic
CommandType::ListSize => {} }
CommandType::Read => {} CommandType::ToInteger => {
CommandType::ReadAll => {} let source_var = command.args[0].clone();
CommandType::ReadStr => {} let result_var = command.args[1].clone();
CommandType::ReadStrAll => {}
CommandType::ForMap => {} // TODO: write logic
CommandType::ForList => {} }
CommandType::While => {} CommandType::ToFloat => {
CommandType::OpenFileIn => {} let source_var = command.args[0].clone();
CommandType::OpenFileOut => {} let result_var = command.args[1].clone();
CommandType::OpenTcpConnection => {}
CommandType::OpenTcpListener => {} // TODO: write logic
CommandType::Sleep => {} }
CommandType::NewThread => {} CommandType::ToBool => {
CommandType::Equals => {} let source_var = command.args[0].clone();
CommandType::More => {} let result_var = command.args[1].clone();
CommandType::Less => {}
CommandType::And => {} // TODO: write logic
CommandType::Or => {} }
CommandType::If => {} CommandType::ToChar => {
CommandType::HasStr => {} let source_var = command.args[0].clone();
CommandType::HasItem => {} let result_var = command.args[1].clone();
CommandType::HasEntry => {}
CommandType::HasKey => {} // TODO: write logic
CommandType::HasValue => {} }
CommandType::HasOptional => {} CommandType::GetSymbol => {
let str_var = command.args[0].clone();
let index_var = command.args[1].clone();
let result_var = command.args[2].clone();
// TODO: write logic
}
CommandType::AddInt => {
let var = command.args[0].clone();
let other_var = command.args[1].clone();
// TODO: write logic
}
CommandType::AddFloat => {
let var = command.args[0].clone();
let other_var = command.args[1].clone();
// TODO: write logic
}
CommandType::SubStr => {
let str_var = command.args[0].clone();
let start_index = command.args[1].clone();
let end_index = command.args[1].clone();
// TODO: write logic
}
CommandType::SubList => {
let list_var = command.args[0].clone();
let start_index = command.args[1].clone();
let end_index = command.args[1].clone();
// TODO: write logic
}
CommandType::ListSize => {
let list_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();
let stream_var = command.args[2].clone();
// TODO: write logic
}
CommandType::ReadAll => {
let name_var = command.args[0].clone();
let stream_var = command.args[1].clone();
// TODO: write logic
}
CommandType::ForMap => {
let func_name = command.args[0].clone();
let map_var = command.args[1].clone();
// TODO: write logic
}
CommandType::ForList => {
let func_name = command.args[0].clone();
let list_var = command.args[1].clone();
// TODO: write logic
}
CommandType::While => {
let func_name = command.args[0].clone();
// TODO: write logic
}
CommandType::OpenFileIn => {
let path_var = command.args[0].clone();
let stream_var = command.args[1].clone();
// TODO: write logic
}
CommandType::OpenFileOut => {
let path_var = command.args[0].clone();
let stream_var = command.args[1].clone();
// TODO: write logic
}
CommandType::OpenTcpConnection => {
let addr_var = command.args[0].clone();
let port_var = command.args[1].clone();
let in_stream = command.args[2].clone();
let out_stream = command.args[3].clone();
// TODO: write logic
}
CommandType::OpenTcpListener => {
let addr_var = command.args[0].clone();
let port_var = command.args[1].clone();
let accept_func = command.args[2].clone();
// TODO: write logic
}
CommandType::Sleep => {
let time_var = command.args[0].clone();
// TODO: write logic
}
CommandType::NewThread => {
let func_name = command.args[0].clone();
// TODO: write logic
}
CommandType::Equals => {
let var = command.args[0].clone();
let other_var = command.args[1].clone();
let result_var = command.args[2].clone();
// TODO: write logic
}
CommandType::More => {
let var = command.args[0].clone();
let other_var = command.args[1].clone();
let result_var = command.args[2].clone();
// TODO: write logic
}
CommandType::Less => {
let var = command.args[0].clone();
let other_var = command.args[1].clone();
let result_var = command.args[2].clone();
// TODO: write logic
}
CommandType::And => {
let var = command.args[0].clone();
let other_var = command.args[1].clone();
let result_var = command.args[2].clone();
// TODO: write logic
}
CommandType::Or => {
let var = command.args[0].clone();
let other_var = command.args[1].clone();
let result_var = command.args[2].clone();
// TODO: write logic
}
CommandType::If => {
let bool_var = command.args[0].clone();
let func_name = command.args[1].clone();
// TODO: write logic
}
CommandType::HasStr => {
let string_var = command.args[0].clone();
let substring = command.args[1].clone();
let result_var = command.args[2].clone();
// TODO: write logic
}
CommandType::HasItem => {
let list_var = command.args[0].clone();
let item_var = command.args[1].clone();
let result_var = command.args[2].clone();
// TODO: write logic
}
CommandType::HasEntry => {
let map_var = command.args[0].clone();
let key_var = command.args[1].clone();
let value_var = command.args[2].clone();
let result_var = command.args[3].clone();
// TODO: write logic
}
CommandType::HasKey => {
let map_var = command.args[0].clone();
let key_var = command.args[1].clone();
let result_var = command.args[2].clone();
// TODO: write logic
}
CommandType::HasValue => {
let map_var = command.args[0].clone();
let value_var = command.args[1].clone();
let result_var = command.args[2].clone();
// TODO: write logic
}
CommandType::HasOptional => {
let optional_var = command.args[0].clone();
let result_var = command.args[1].clone();
// TODO: write logic
}
CommandType::UnpackOptional => {
let optional_var = command.args[0].clone();
let result_var = command.args[1].clone();
// TODO: write logic
}
_ => {} _ => {}
} }

View File

@ -1,19 +1,17 @@
FUNC null println text string # println command FUNC null println text string # println function
TEMP_VAR char br 10 # line break var TEMP_VAR char br 10 # line break var
ADD_STR text br # add line break to text var ADD_STR text br # add line break to text var
WRITE text cout # write text var to console WRITE text cout # write text var to console
FUNC_END # end println command FUNC_END # end println function
FUNC null hello_world index integer FUNC null hello_world index integer
USE_FUNC println null text USE_FUNC println null text
FUNC_END FUNC_END
INIT_VAR string text INIT_VAR string text
SET_VAR text Hello World! SET_VAR text Hello World!
TEMP_VAR integer start_index 0 TEMP_VAR integer start_index 0 # temp vars can stack
TEMP_VAR integer end_index 9 TEMP_VAR integer end_index 9
FOR hello_world start_index end_index FOR hello_world start_index end_index