From 6f201024dd3c31070da18feb20000be85205b581 Mon Sep 17 00:00:00 2001 From: MeexReay Date: Sat, 27 Jul 2024 22:44:04 +0300 Subject: [PATCH] refactor maybe --- README.md | 7 +- src/lib.rs | 288 +++++++++++++++++++++++++++++++++++++++++++---------- test.sus | 8 +- 3 files changed, 243 insertions(+), 60 deletions(-) diff --git a/README.md b/README.md index e06124a..c7bce2d 100644 --- a/README.md +++ b/README.md @@ -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` | diff --git a/src/lib.rs b/src/lib.rs index cd4e8c5..deda924 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -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 + } _ => {} } diff --git a/test.sus b/test.sus index 377679f..21bf2da 100644 --- a/test.sus +++ b/test.sus @@ -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