From f0857049cb87077925e9bd08f460bc79da7b4048 Mon Sep 17 00:00:00 2001 From: MeexReay Date: Sun, 28 Jul 2024 17:44:08 +0300 Subject: [PATCH] edit readme --- README.md | 193 ++++++++++++++++++++++++++++++++++++------------------ test.sus | 5 +- 2 files changed, 130 insertions(+), 68 deletions(-) diff --git a/README.md b/README.md index 8971e9a..56173c7 100644 --- a/README.md +++ b/README.md @@ -5,24 +5,95 @@ код хеллоу ворлда: ``` -INIT_VAR string text # init text var -SET_VAR text Hello World! # set text to var -TEMP_VAR char br 10 # create temp var with line break -ADD_STR text br # add line break to text -WRITE text cout # write text to console -DROP_VAR text # drop text var +INIT_VAR string text # создать переменную с текстом +SET_VAR text Hello World! # установить текст в переменную +TEMP_VAR char br 10 # создать временную переменную с символом перехода на следующую строку +ADD_STR text br # добавить символ перехода на следующую строку в переменную с текстом +WRITE text cout # написать текст в консоль +DROP_VAR text # дропнуть переменную с текстом ``` -минимальный код для хеллоу ворлда: +минимальный код для хеллоу ворлда (без перехода на следующую строку): ``` TEMP_VAR string text Hello World! WRITE text cout ``` +## Синтаксис + +Типичный синтаксис языка: + +``` +FUNC null println text string # println function + TEMP_VAR char new_line 10 # init line break var + ADD_STR text new_line # add line break to text var + WRITE text cout # write text var to console +FUNC_END # end println function + +TEMP_VAR string text Hello World! +USE_FUNC println null text +``` + +С каждой стороны команды табы и пробелы разрешены, но в этом есть минус в том что нельзя установить текст в переменную где в конце будет пробел / таб / переход на новую строку в одну команду +Эта проблема решается добавлением отдельных `char` к переменной + +Комментарии пишутся как в петухоне, в конце строки +``` +COMMAND arg1 arg2 # комментарий!!! # ну пример того что ничо не будет если написать два хештега +``` + +## Переменные + +Тут нельзя сделать + +```py +print("123", end="") +``` + +Тут надо сначала создать переменную а потом запихнуть в функцию + +``` +INIT_VAR string text # создать переменную +SET_TEXT text 123 # запихнуть текст в переменную +WRITE text cout # написать текст в консоль +DROP_VAR text # дропнуть переменную +``` + +Кстати, тут в теории можно поставить абсолютно любое название переменной, хоть с числа, хоть с 未来15年内分子制造技术的进展,从很多角度来说都是方案的专家所说的“关键的不确定性”的一个典型例子。 + +### Типы переменных + +| Type | Example Command | Example Value | +|------------------------|------------------------------------|--------------------------| +| `bool` | `SET_VAR var true` | `true` / `false` | +| `string` | `SET_VAR var some_text` | `some_text` | +| `integer` | `SET_VAR var 123` | `123` | +| `float` | `SET_VAR var 14.48` | `14.48` | +| `char` | `SET_VAR var 255` | `0 - 255` | +| `list[type]` | `SET_VAR var.0 value` | `value` | +| `map[key_type,value_type]` | `SET_VAR var.key value` | `value` | +| `optional[type]` | `SET_VAR var (value)` | `(value)` / `null` | +| `in_stream` | `OPEN_FILE_IN path var` | | +| `out_stream` | `OPEN_FILE_OUT path var` | | + +### Стандартные переменные + +| Переменная | Описание | Тип | +|------------|--------------------------------------|-------------| +| `args` | Аргументы при вызове программы | `list[string]` | +| `cout` | Вывод консоли | `out_stream` | +| `cin` | Ввод консоли | `in_stream` | + ## Команды +Весь язык строится на командах, структура команды: +``` +КОМАНДА параметр1 параметр2 параметр3 ... параметрN +``` +Тип параметра зависит от команды + ### Переменные | Команда | Параметры | Описание | @@ -35,6 +106,7 @@ WRITE text cout | `DROP_VAR` | `name_var` | Дропнуть переменную `name_var` | | `HAS_VAR` | `name_var`, `result_var` | В переменную `result_var` записывается `bool` существует ли переменная `name_var` | + ### Преобразование переменных | Команда | Параметры | Описание | @@ -58,27 +130,27 @@ WRITE text cout | `STRING_SIZE` | `string_var`, `result_var` | Получить размер строки и записать в переменную `result_var` типа `int` | | `MAP_SIZE` | `map_var`, `result_var` | Получить размер мапы и записать в переменную `result_var` типа `int` | -### Циклы + +### Функции | Команда | Параметры | Описание | |--------------------------|------------|-------------| -| `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_LIST` | `func(any)`, `list_var` | Функция `func` вызывается для каждого предмета переменной `list_var` | -| `FOR_STRING` | `func(char)`, `string_var` | Функция `func` вызывается для каждого символа строки `string_var` | -| `WHILE` | `func -> bool` | Функция `func` (с результатом `bool`) вызывается, пока функция выдает `true` | +| `USE_FUNC` | `func_name`, `result_var`, `[arg_var1] ... [arg_varN]` | Функция `func` вызывается с переданными аргументами и устанавливает результат в переменную `result_var` | +| `FUNC` | `result_type`, `func_name`, `[arg_name_1 arg_type] ... [arg_name_N arg_type]` | Создать функцию с типом результата `result_type`, названием `func_name` и аргументами `[arg_name_1 arg_type] ... [arg_name_N arg_type]`. Установить результат переменной можно изменив переменную `result` внутри функции. Все команды после этой и до `FUNC_END` будут командами функции. Функции внутри функций не могут быть. | +| `RETURN` | | Досрочно выйти из функции, также работает как выход из скрипта | +| `FUNC_END` | | Маркер, что команды функции тут заканчиваются | -### Работа со стримами +#### Создание функций + +Пример функции: + +``` +FUNC result_type func_name arg_name type arg_name2 type # Создание функции + SET_VAR result var # Установить результат функции + RETURN # Для досрочного выхода из функции +FUNC_END +``` -| Команда | Параметры | Описание | -|--------------------------|------------|-------------| -| `WRITE` | `name_var`, `stream_var` | Вывести переменную `name_var` в `stream_var` | -| `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` | -| `OPEN_TCP_LISTENER` | `addr_var`, `port_var`, `accept_func(string,int,in_stream,out_stream)` | Ожидание подключений с `addr_var:port_var` (`addr_var: string`, `port_var: int` - переменные), при подключениях вызывается функция `accept_func` | ### Логические операции @@ -99,52 +171,45 @@ WRITE text cout | `HAS_OPTIONAL` | `optional_var`, `result_var` | Узнать, имеет ли данные опшнл `optional_var` и записать результат в `result_var` | -### Функции +### Циклы | Команда | Параметры | Описание | |--------------------------|------------|-------------| -| `USE_FUNC` | `func_name`, `result_var`, `[arg_var1] ... [arg_varN]` | Функция `func` вызывается с переданными аргументами и устанавливает результат в переменную `result_var` | -| `FUNC` | `result_type`, `func_name`, `[arg_name_1 arg_type] ... [arg_name_N arg_type]` | Создать функцию с типом результата `result_type`, названием `func_name` и аргументами `[arg_name_1 arg_type] ... [arg_name_N arg_type]`. Установить результат переменной можно изменив переменную `result` внутри функции. Все команды после этой и до `FUNC_END` будут командами функции. Функции внутри функций не могут быть. | -| `RETURN` | | Досрочно выйти из функции, также работает как выход из скрипта | -| `FUNC_END` | | Маркер, что команды функции тут заканчиваются | +| `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_LIST` | `func(any)`, `list_var` | Функция `func` вызывается для каждого предмета переменной `list_var` | +| `FOR_STRING` | `func(char)`, `string_var` | Функция `func` вызывается для каждого символа строки `string_var` | +| `WHILE` | `func -> bool` | Функция `func` (с результатом `bool`) вызывается, пока функция выдает `true` | -### Прочее + +### Работа со стримами + +| Команда | Параметры | Описание | +|--------------------------|------------|-------------| +| `WRITE` | `name_var`, `stream_var` | Вывести переменную `name_var` в `stream_var` | +| `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_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_LISTENER` | `addr_var`, `port_var`, `accept_func(string,int,in_stream,out_stream)` | Ожидание подключений с `addr_var:port_var` (`addr_var: string`, `port_var: int` - переменные), при подключениях вызывается функция `accept_func` (КОМАНДА В РАЗРАБОТКЕ) | + + +### Файлы + +| Команда | Параметры | Описание | +|--------------------------|------------|-------------| +| `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` (КОМАНДА В РАЗРАБОТКЕ) | + + +### Система | Команда | Параметры | Описание | |--------------------------|------------|-------------| | `SLEEP` | `time_var` | Ждать миллисекунд из переменной `time_var` (тип переменной: int) | -| `NEW_THREAD` | `func` | Вызвать функцию `func` в новом потоке | - -## Типы переменных - -| Type | Example Command | Example Value | -|------------------------|------------------------------------|--------------------------| -| `bool` | `SET_VAR var true` | `true` / `false` | -| `string` | `SET_VAR var some_text` | `some_text` | -| `integer` | `SET_VAR var 123` | `123` | -| `float` | `SET_VAR var 14.48` | `14.48` | -| `char` | `SET_VAR var 255` | `0 - 255` | -| `list[type]` | `SET_VAR var.0 value` | `value` | -| `map[key_type,value_type]` | `SET_VAR var.key value` | `value` | -| `optional[type]` | `SET_VAR var (value)` | `(value)` / `null` | -| `in_stream` | `OPEN_FILE_IN path var` | | -| `out_stream` | `OPEN_FILE_OUT path var` | | - -## Стандартные переменные - -| Переменная | Описание | Тип | -|------------|--------------------------------------|-------------| -| `args` | Аргументы при вызове программы | `list[string]` | -| `cout` | Вывод консоли | `out_stream` | -| `cin` | Ввод консоли | `in_stream` | - -## Создание функций - -example code: - -``` -FUNC result_type func_name arg_name type arg_name2 type # Создание функции -SET_VAR result value # Установить результат функции (value изменить, это просто пример) -RETURN # Для досрочного выхода из функции (тут это не надо, функция и так закончится, это просто пример) -FUNC_END -``` +| `NEW_THREAD` | `func` | Вызвать функцию `func` в новом потоке (КОМАНДА В РАЗРАБОТКЕ) | diff --git a/test.sus b/test.sus index e9caa96..a7e621e 100644 --- a/test.sus +++ b/test.sus @@ -1,20 +1,17 @@ INIT_VAR char space SET_VAR space 32 -INIT_VAR char new_line SET_VAR new_line 10 INIT_VAR int one SET_VAR one 1 FUNC null println text string # println function + TEMP_VAR char new_line 10 # init line break var ADD_STR text new_line # add line break to text var WRITE text cout # write text var to console FUNC_END # end println function - -# write hello world - TEMP_VAR string text Hello World! USE_FUNC println null text