mirror of
https://github.com/MeexReay/sustlang.git
synced 2025-06-24 10:33:01 +03:00
edit readme
This commit is contained in:
parent
7c668f875b
commit
f0857049cb
193
README.md
193
README.md
@ -5,24 +5,95 @@
|
|||||||
код хеллоу ворлда:
|
код хеллоу ворлда:
|
||||||
|
|
||||||
```
|
```
|
||||||
INIT_VAR string text # init text var
|
INIT_VAR string text # создать переменную с текстом
|
||||||
SET_VAR text Hello World! # set text to var
|
SET_VAR text Hello World! # установить текст в переменную
|
||||||
TEMP_VAR char br 10 # create temp var with line break
|
TEMP_VAR char br 10 # создать временную переменную с символом перехода на следующую строку
|
||||||
ADD_STR text br # add line break to text
|
ADD_STR text br # добавить символ перехода на следующую строку в переменную с текстом
|
||||||
WRITE text cout # write text to console
|
WRITE text cout # написать текст в консоль
|
||||||
DROP_VAR text # drop text var
|
DROP_VAR text # дропнуть переменную с текстом
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
минимальный код для хеллоу ворлда:
|
минимальный код для хеллоу ворлда (без перехода на следующую строку):
|
||||||
|
|
||||||
```
|
```
|
||||||
TEMP_VAR string text Hello World!
|
TEMP_VAR string text Hello World!
|
||||||
WRITE text cout
|
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` |
|
| `DROP_VAR` | `name_var` | Дропнуть переменную `name_var` |
|
||||||
| `HAS_VAR` | `name_var`, `result_var` | В переменную `result_var` записывается `bool` существует ли переменная `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` |
|
| `STRING_SIZE` | `string_var`, `result_var` | Получить размер строки и записать в переменную `result_var` типа `int` |
|
||||||
| `MAP_SIZE` | `map_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` это названия переменных |
|
| `USE_FUNC` | `func_name`, `result_var`, `[arg_var1] ... [arg_varN]` | Функция `func` вызывается с переданными аргументами и устанавливает результат в переменную `result_var` |
|
||||||
| `FOR_MAP` | `func(any, any)`, `map_var` | Функция `func` вызывается для каждого `key`, `value` переменной `map_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` будут командами функции. Функции внутри функций не могут быть. |
|
||||||
| `FOR_LIST` | `func(any)`, `list_var` | Функция `func` вызывается для каждого предмета переменной `list_var` |
|
| `RETURN` | | Досрочно выйти из функции, также работает как выход из скрипта |
|
||||||
| `FOR_STRING` | `func(char)`, `string_var` | Функция `func` вызывается для каждого символа строки `string_var` |
|
| `FUNC_END` | | Маркер, что команды функции тут заканчиваются |
|
||||||
| `WHILE` | `func -> bool` | Функция `func` (с результатом `bool`) вызывается, пока функция выдает `true` |
|
|
||||||
|
|
||||||
### Работа со стримами
|
#### Создание функций
|
||||||
|
|
||||||
|
Пример функции:
|
||||||
|
|
||||||
|
```
|
||||||
|
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` |
|
| `HAS_OPTIONAL` | `optional_var`, `result_var` | Узнать, имеет ли данные опшнл `optional_var` и записать результат в `result_var` |
|
||||||
|
|
||||||
|
|
||||||
### Функции
|
### Циклы
|
||||||
|
|
||||||
| Команда | Параметры | Описание |
|
| Команда | Параметры | Описание |
|
||||||
|--------------------------|------------|-------------|
|
|--------------------------|------------|-------------|
|
||||||
| `USE_FUNC` | `func_name`, `result_var`, `[arg_var1] ... [arg_varN]` | Функция `func` вызывается с переданными аргументами и устанавливает результат в переменную `result_var` |
|
| `FOR` | `func(int)`, `start_index`, `end_index` | Функция `func` (с единственным аргументом с типом `int`) вызывается с `start_index` до `end_index` включительно, `start_index` и `end_index` это названия переменных |
|
||||||
| `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` будут командами функции. Функции внутри функций не могут быть. |
|
| `FOR_MAP` | `func(any, any)`, `map_var` | Функция `func` вызывается для каждого `key`, `value` переменной `map_var` |
|
||||||
| `RETURN` | | Досрочно выйти из функции, также работает как выход из скрипта |
|
| `FOR_LIST` | `func(any)`, `list_var` | Функция `func` вызывается для каждого предмета переменной `list_var` |
|
||||||
| `FUNC_END` | | Маркер, что команды функции тут заканчиваются |
|
| `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) |
|
| `SLEEP` | `time_var` | Ждать миллисекунд из переменной `time_var` (тип переменной: int) |
|
||||||
| `NEW_THREAD` | `func` | Вызвать функцию `func` в новом потоке |
|
| `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
|
|
||||||
```
|
|
||||||
|
5
test.sus
5
test.sus
@ -1,20 +1,17 @@
|
|||||||
INIT_VAR char space
|
INIT_VAR char space
|
||||||
SET_VAR space 32
|
SET_VAR space 32
|
||||||
|
|
||||||
INIT_VAR char new_line
|
|
||||||
SET_VAR new_line 10
|
SET_VAR new_line 10
|
||||||
|
|
||||||
INIT_VAR int one
|
INIT_VAR int one
|
||||||
SET_VAR one 1
|
SET_VAR one 1
|
||||||
|
|
||||||
FUNC null println text string # println function
|
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
|
ADD_STR text new_line # 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 function
|
FUNC_END # end println function
|
||||||
|
|
||||||
|
|
||||||
# write hello world
|
|
||||||
|
|
||||||
TEMP_VAR string text Hello World!
|
TEMP_VAR string text Hello World!
|
||||||
USE_FUNC println null text
|
USE_FUNC println null text
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user