mirror of
https://github.com/MeexReay/sustlang.git
synced 2025-06-24 18:43:01 +03:00
refactor maybe
This commit is contained in:
parent
842ef24a60
commit
6f201024dd
@ -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` |
|
||||||
|
288
src/lib.rs
288
src/lib.rs
@ -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
|
||||||
|
}
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
8
test.sus
8
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
|
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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user