170 lines
5.1 KiB
Markdown
170 lines
5.1 KiB
Markdown
# π¦ FoxLang
|
|
|
|
  
|
|
|
|
**FoxLang** β ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅ΠΌΡΠΉ ΡΠ·ΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅Π³ΠΎ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ
ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ ΠΈ ΡΡΡΠΎΠ³ΠΎΠΉ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΠ΅ΠΉ.
|
|
|
|
## β¨ ΠΠ»ΡΡΠ΅Π²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ
|
|
|
|
- **π§ ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ:** ΠΠΎΠ»Π½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΡΠ½ΠΊΡΠΈΠΉ Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠΎΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ
|
|
- **π ΠΠΎΠ΄ΡΠ»ΡΠ½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ°:** ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΡΠ΅ΡΠ΅Π· `include("lib.fox")` Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ
ΡΡΠ½ΠΊΡΠΈΠΉ
|
|
- **π€ Π‘ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ:** ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ Ρ ΠΏΠΎΠ΄ΡΠ΅ΡΠΊΠΈΠ²Π°Π½ΠΈΡΠΌΠΈ (`user_name`, `get_data`)
|
|
- **π¦ ΠΠ°ΡΡΠΈΠ²Ρ:** ΠΡΡΡΠΎΠ΅Π½Π½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠΎΠ·Π΄Π°Π½ΠΈΡ, ΡΡΠ΅Π½ΠΈΡ ΠΈ Π·Π°ΠΏΠΈΡΠΈ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ²
|
|
- **π Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΎΠΌ:** Π¦ΠΈΠΊΠ»Ρ `while`, `for` ΠΈ ΡΡΠ»ΠΎΠ²ΠΈΡ `if/else`
|
|
- **π’ Π‘ΡΡΠΎΠ³Π°Ρ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ:** `int`, `float`, `string`, `bool`, `void` Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ
|
|
- **π§ ΠΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ:** ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° `&&`, `||`, `!` Π΄Π»Ρ boolean Π»ΠΎΠ³ΠΈΠΊΠΈ
|
|
- **π ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ:** ΠΠ°ΡΠΈΡΠ° ΠΎΡ ΠΊΡΠ°ΡΠ΅ΠΉ, ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ²Π½ΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ°
|
|
- **π² ΠΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ:** ΠΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠ°, Π²Π²ΠΎΠ΄/Π²ΡΠ²ΠΎΠ΄, Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΡΠΈΡΠ΅Π», ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²
|
|
|
|
## π ΠΡΡΡΡΡΠΉ ΡΡΠ°ΡΡ
|
|
|
|
### 1. Π‘Π±ΠΎΡΠΊΠ° (Linux)
|
|
```bash
|
|
cd src
|
|
g++ main.cpp Lexer.cpp Parser.cpp -o foxlang
|
|
```
|
|
|
|
### 1.2. Π‘Π±ΠΎΡΠΊΠ° (Windows)
|
|
```bash
|
|
cd src
|
|
g++ main.cpp Lexer.cpp Parser.cpp -o foxlang.exe
|
|
```
|
|
|
|
### 1.3. Π‘Π±ΠΎΡΠΊΠ° Wimdows (MSVC)
|
|
```bash
|
|
cd src
|
|
cl main.cpp Lexer.cpp Parser.cpp /Fefoxlang.exe
|
|
```
|
|
|
|
### 2. ΠΠ°ΠΏΡΡΠΊ (Linux)
|
|
```bash
|
|
./foxlang script.fox
|
|
```
|
|
|
|
### 2.1. ΠΠ°ΠΏΡΡΠΊ (Windows)
|
|
```bash
|
|
foxlang.exe script.fox
|
|
```
|
|
|
|
## π» ΠΡΠΈΠΌΠ΅ΡΡ ΠΊΠΎΠ΄Π°
|
|
|
|
### ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ
|
|
```cpp
|
|
int factorial(int n) {
|
|
if (n <= 1) {
|
|
return 1;
|
|
}
|
|
return n * factorial(n - 1);
|
|
}
|
|
|
|
void main() {
|
|
int result = factorial(5);
|
|
print("5! = " + result);
|
|
}
|
|
|
|
main();
|
|
```
|
|
|
|
### Π Π°Π±ΠΎΡΠ° Ρ ΠΌΠ°ΡΡΠΈΠ²Π°ΠΌΠΈ
|
|
```cpp
|
|
void bubble_sort(array arr, int size) {
|
|
int i = 0;
|
|
while (i < size - 1) {
|
|
int j = 0;
|
|
while (j < size - i - 1) {
|
|
if (get(arr, j) > get(arr, j + 1)) {
|
|
int temp = get(arr, j);
|
|
set(arr, j, get(arr, j + 1));
|
|
set(arr, j + 1, temp);
|
|
}
|
|
j = j + 1;
|
|
}
|
|
i = i + 1;
|
|
}
|
|
}
|
|
```
|
|
|
|
### ΠΠΎΠ΄ΡΠ»ΡΠ½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ°
|
|
```cpp
|
|
// math_lib.fox
|
|
int add(int a, int b) {
|
|
return a + b;
|
|
}
|
|
|
|
float average(int a, int b) {
|
|
return (a + b) / 2.0;
|
|
}
|
|
|
|
// main.fox
|
|
include("math_lib.fox");
|
|
|
|
int sum = add(10, 20);
|
|
float avg = average(15, 25);
|
|
print("Sum: " + sum + ", Average: " + avg);
|
|
```
|
|
|
|
### Π§ΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²
|
|
```cpp
|
|
// config.txt ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ: server_port=8080
|
|
string config = read_file("config.txt");
|
|
print("Config: " + config);
|
|
|
|
// ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΡΡΠΏΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΡΠ΅Π½ΠΈΡ
|
|
if (config != "") {
|
|
print("β
Config loaded successfully");
|
|
} else {
|
|
print("β Failed to load config");
|
|
}
|
|
```
|
|
|
|
### FastAPI-ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΉ Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅Ρ
|
|
```cpp
|
|
// ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ΅Π²ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ
|
|
include("src/net.fox");
|
|
|
|
// ΠΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ API
|
|
void api_home() {
|
|
json_response("{\"message\":\"π¦ Welcome to FoxLang API!\"}");
|
|
}
|
|
|
|
void api_users() {
|
|
json_response("{\"users\":[{\"id\":1,\"name\":\"Alice\"}]}");
|
|
}
|
|
|
|
// ΠΠ°ΠΏΡΡΠΊ ΡΠ΅ΡΠ²Π΅ΡΠ°
|
|
void main() {
|
|
start_server(8080);
|
|
register_get("/", "api_home");
|
|
register_get("/users", "api_users");
|
|
print("π Server: http://localhost:8080");
|
|
}
|
|
|
|
main();
|
|
```
|
|
|
|
## π Π‘ΡΡΡΠΊΡΡΡΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ°
|
|
|
|
* `src/` β ΠΡΡ
ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ° (C++)
|
|
* `test/` β Π’Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ
|
|
* `doc/` β ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ
|
|
* `CHANGELOG.md` β ΠΡΡΠΎΡΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ
|
|
* `DOCUMENTATION.md` β ΠΠΎΠ»Π½Π°Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΡΠ·ΡΠΊΠ°
|
|
|
|
## π§ͺ Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
|
|
|
|
```bash
|
|
# Π’Π΅ΡΡΡ
|
|
./src/foxlang test/variables.fox # Π’Π΅ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΠΈ ΡΠΈΠΏΠΎΠ²
|
|
./src/foxlang test/functions.fox # Π’Π΅ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ
ΡΡΠ½ΠΊΡΠΈΠΉ
|
|
./src/foxlang test/arrays.fox # Π’Π΅ΡΡ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ²
|
|
./src/foxlang test/control_flow.fox # Π’Π΅ΡΡ ΡΠΈΠΊΠ»ΠΎΠ² ΠΈ ΡΡΠ»ΠΎΠ²ΠΈΠΉ
|
|
./src/foxlang test/math_operations.fox # Π’Π΅ΡΡ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ
ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ
|
|
./src/foxlang test/modules.fox # Π’Π΅ΡΡ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ
|
|
./src/foxlang test/builtin_functions.fox # Π’Π΅ΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ
ΡΡΠ½ΠΊΡΠΈΠΉ
|
|
```
|
|
|
|
---
|
|
|
|
**Author:** [SkrinVex](https://skrinvex.su)
|
|
**License:** MIT
|