Skip to content
This repository was archived by the owner on Mar 12, 2025. It is now read-only.

Commit 31393fd

Browse files
committed
Giraffe-Language README.md
1 parent be59ce5 commit 31393fd

File tree

4 files changed

+87
-2
lines changed

4 files changed

+87
-2
lines changed

LICENSE

+1-1
Original file line numberDiff line numberDiff line change
@@ -632,7 +632,7 @@ state the exclusion of warranty; and each file should have at least
632632
the "copyright" line and a pointer to where the full notice is found.
633633

634634
<one line to give the program's name and a brief idea of what it does.>
635-
Copyright (C) <year> <name of author>
635+
Copyright (C) 2025 NullPointerGang
636636

637637
This program is free software: you can redistribute it and/or modify
638638
it under the terms of the GNU General Public License as published by

README.md

+86-1
Original file line numberDiff line numberDiff line change
@@ -1 +1,86 @@
1-
# Giraffe-Language
1+
# Giraffe-Language
2+
3+
![Giraffe](images/Giraffe.png)
4+
5+
**Giraffe-Language** — это язык программирования, ориентированный на создание скриптов для автоматизации процессов и разработки удобных интерфейсов для сложных проектов.
6+
7+
8+
## Текущий статус
9+
10+
На данный момент проект находится на стадии разработки теоретической части и планирования. Ожидается, что следующие этапы будут включать:
11+
12+
- Разработка интерпретатора
13+
- Разработка парсера и токенизатора
14+
- Реализация структуры хранения переменных и состояния
15+
- Оптимизация производительности и добавление новых фич
16+
17+
## Цели:
18+
19+
- Автоматизация: Giraffe-Language предоставляет простые и гибкие возможности для автоматизации задач, что идеально подходит для настройки и обслуживания процессов, а также для работы с API и системами.
20+
21+
- Удобные интерфейсы: Язык ориентирован на создание удобных и читаемых интерфейсов, которые помогут интегрировать и управлять сложными проектами через легкие в использовании скрипты.
22+
23+
- Интерактивность и гибкость: Язык поддерживает динамическую работу с данными и интерфейсами, позволяя быстро изменять поведение системы через скрипты.
24+
25+
## Конецепт:
26+
27+
### Графичиская схема роботы:
28+
29+
![Giraffe Sheme](images/Giraffe_Sheme.jpg)
30+
31+
### Описание концепта/схемы:
32+
33+
#### Лаксер (Токенайзер)
34+
Разбивает исходный код на токены, представляя его в виде более простых элементов для дальнейшей обработки
35+
36+
37+
#### Парсер
38+
Обрабатывает токены, строит абстрактное синтаксическое дерево (AST) и отправляет данные в хранилище для дальнейшей работы
39+
40+
41+
#### Интерпритатор
42+
Проходит по AST, работает с хранилищем переменных (`env` или `global`), а также обновляет состояние интерпретатора, включая указатель на текущую инструкцию и другие параметры
43+
44+
45+
#### Хранилищ `env`/`state`
46+
Хранилище перемененных состоит из
47+
- имя переменной
48+
- тип перемнной
49+
- значение
50+
51+
В хранилище переменные добавляются при инициализации если переменная определена, если нет то при ее определении
52+
53+
54+
#### Хранилище `state`
55+
Содержит информацию необходимую для интерпретатора в текущий момент.
56+
57+
**Описание `state`:**
58+
59+
- Очередь вызовов
60+
- Указатель инструкции (номер или строка в AST дереве исполняемого узла)
61+
- Регистр перемененных - временные переменные только для интерпретатора
62+
63+
#### ***Опционально для `state`:***
64+
65+
- Последняя ошибка
66+
- Состояние роботы интерпретатора
67+
- Отладочный режим
68+
69+
70+
71+
## Идеи по улучшению концепта:
72+
73+
**Мемоизация вычислений:** Для часто встречающихся выражений можно хранить уже вычисленные результаты и возвращать их при повторных вызовах, чтобы избежать лишних вычислений.
74+
75+
**Снимки состояния:** На определённых этапах работы программы можно делать "снимки" состояния для отката в случае ошибки или для возврата к состоянию на определённой инструкции.
76+
77+
**Поддержка замыканий:** Механизм замыканий позволяет переменным сохранять своё значение даже после выхода из области видимости, где они были определены. Это полезно для реализации лямбда-функций или обработчиков.
78+
79+
**Использование слабых ссылок:** Для некоторых объектов, например, временных данных, можно использовать слабые ссылки `weak references`, чтобы избежать утечек памяти при удалении ненужных объектов.
80+
81+
**Поддержка динамических и статических типов**.
82+
83+
84+
## Лицензия
85+
86+
Этот проект лицензирован под MIT License - подробности см. в файле [LICENSE](LICENSE).

images/Giraffe.png

33.4 KB
Loading

images/Giraffe_Sheme.jpg

136 KB
Loading

0 commit comments

Comments
 (0)