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]`) |
| `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` |
### Циклы
@ -67,10 +68,8 @@ WRITE text cout
| Команда | Параметры | Описание |
|--------------------------|------------|-------------|
| `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_ALL` | `name_var`, `stream_var` | Прочитать с `stream_var` все имеющиеся байты в переменную `name_var` типа `list[char]` |
| `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` |
| `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]`/`string` |
| `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_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`
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` это названия переменных
///
/// Название: FOR \
@ -848,6 +836,12 @@ pub enum CommandType {
/// Название: HAS_OPTIONAL \
/// Параметры: `optional_var`, `result_var`
HasOptional,
/// Достать данные из `optional_var` и установить в `result_var`
///
/// Название: UNPACK_OPTIONAL \
/// Параметры: `optional_var`, `result_var`
UnpackOptional,
}
impl CommandType {
@ -876,8 +870,6 @@ impl CommandType {
"WRITE" => Ok(CommandType::Write),
"READ" => Ok(CommandType::Read),
"READ_ALL" => Ok(CommandType::ReadAll),
"READ_STR" => Ok(CommandType::ReadStr),
"READ_STR_ALL" => Ok(CommandType::ReadStrAll),
"FOR" => Ok(CommandType::For),
"FOR_MAP" => Ok(CommandType::ForMap),
"FOR_LIST" => Ok(CommandType::ForList),
@ -1480,43 +1472,237 @@ impl RunningScript {
)?;
}
}
CommandType::ToString => {}
CommandType::ToBytes => {}
CommandType::ToInteger => {}
CommandType::ToFloat => {}
CommandType::ToBool => {}
CommandType::ToChar => {}
CommandType::GetSymbol => {}
CommandType::AddInt => {}
CommandType::AddFloat => {}
CommandType::SubStr => {}
CommandType::SubList => {}
CommandType::ListSize => {}
CommandType::Read => {}
CommandType::ReadAll => {}
CommandType::ReadStr => {}
CommandType::ReadStrAll => {}
CommandType::ForMap => {}
CommandType::ForList => {}
CommandType::While => {}
CommandType::OpenFileIn => {}
CommandType::OpenFileOut => {}
CommandType::OpenTcpConnection => {}
CommandType::OpenTcpListener => {}
CommandType::Sleep => {}
CommandType::NewThread => {}
CommandType::Equals => {}
CommandType::More => {}
CommandType::Less => {}
CommandType::And => {}
CommandType::Or => {}
CommandType::If => {}
CommandType::HasStr => {}
CommandType::HasItem => {}
CommandType::HasEntry => {}
CommandType::HasKey => {}
CommandType::HasValue => {}
CommandType::HasOptional => {}
CommandType::ToString => {
let source_var = command.args[0].clone();
let result_var = command.args[1].clone();
// TODO: write logic
}
CommandType::ToBytes => {
let source_var = command.args[0].clone();
let result_var = command.args[1].clone();
// TODO: write logic
}
CommandType::ToInteger => {
let source_var = command.args[0].clone();
let result_var = command.args[1].clone();
// TODO: write logic
}
CommandType::ToFloat => {
let source_var = command.args[0].clone();
let result_var = command.args[1].clone();
// TODO: write logic
}
CommandType::ToBool => {
let source_var = command.args[0].clone();
let result_var = command.args[1].clone();
// TODO: write logic
}
CommandType::ToChar => {
let source_var = command.args[0].clone();
let result_var = command.args[1].clone();
// TODO: write logic
}
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
ADD_STR text br # add line break to text var
WRITE text cout # write text var to console
FUNC_END # end println command
FUNC_END # end println function
FUNC null hello_world index integer
USE_FUNC println null text
FUNC_END
INIT_VAR string text
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
FOR hello_world start_index end_index