https://github.com/mr-r0ot/nexon
Masterpiece programming language NEXon!
https://github.com/mr-r0ot/nexon
cpp fast fast-code language llvm programming programming-language
Last synced: about 1 month ago
JSON representation
Masterpiece programming language NEXon!
- Host: GitHub
- URL: https://github.com/mr-r0ot/nexon
- Owner: mr-r0ot
- License: mit
- Created: 2025-03-06T21:04:52.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2025-03-06T21:33:34.000Z (about 1 year ago)
- Last Synced: 2025-07-26T20:57:25.128Z (10 months ago)
- Topics: cpp, fast, fast-code, language, llvm, programming, programming-language
- Language: C++
- Homepage:
- Size: 162 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
### Nexon
# Next & On - آینده ای روشن
این پروژه در [https://github.com/mr-r0ot/Nexon](https://github.com/mr-r0ot/Nexon) قرار دارد.
نویسنده و سازنده این پروژه: **محمد طاها گرجی**
---
# زبان برنامهنویسی Nexon
## مقدمه
زبان برنامهنویسی Nexon، شاهکاری از نسل جدید زبانهای برنامهنویسی است که با بهرهگیری از پیشرفتهترین الگوریتمهای بهینهسازی، استفاده حداکثری از منابع CPU و GPU، پردازش موازی و قابلیت ادغام کامل با کتابخانههای C++ و Python، به عنوان یک سیستم جامع و تولیدی طراحی شده است. این زبان، با هدف ارائه یک محیط توسعهی قدرتمند، دقیق و کارآمد برای حل مسائل پیچیده علمی، فیزیکی، رمزنگاری، محاسبات فضایی و سایر کاربردهای پیشرفته، ایجاد شده است.
این زبان توسط **محمد طاها گرجی** طراحی و ساخته شده و تمامی بخشهای آن از یک سیستم کامل تولیدی بهرهمند است. Nexon با بهرهگیری از زیرساختهای قدرتمند مانند LLVM برای تولید کد، CUDA برای شتابدهی GPU، پردازش موازی با استفاده از std::thread و ادغام کامل با کتابخانههای استاندارد C++ و Python، یک پلتفرم یکپارچه برای توسعه برنامههای سطح بالا فراهم میکند.
در این مستند، به تفصیل در مورد معماری کلی زبان Nexon، الگوریتمهای اصلی کارکرد آن، نحوه استفاده از ابزارها و دستورات آن، نحوه استفاده از کتابخانههای C++ و Python، و راهنمای نصب و اجرای پروژه توضیح داده شده است.
---
## بخش ۱: معرفی زبان Nexon
### ۱.۱. ویژگیهای کلیدی Nexon
- **پشتیبانی از بهینهسازیهای سطح پایین:**
استفاده از زیرساخت LLVM برای تولید کد بهینه و بهرهمندی از تکنیکهای پیشرفته بهینهسازی مانند بهینهسازیهای بینرویه، وکتوریزه کردن کد و غیره.
- **استفاده حداکثری از منابع سختافزاری:**
استفاده واقعی از چندپردازشی (multi-threading) با بهرهگیری از std::thread و شتابدهی GPU از طریق CUDA برای افزایش سرعت اجرای الگوریتمهای پیچیده.
- **ادغام کامل با کتابخانههای C++ و Python:**
امکان استفاده از تمامی کتابخانههای استاندارد C++ در کدهای Nexon به صورت مستقیم (از طریق #include) و همچنین امکان استفاده از کتابخانههای Python با استفاده از مفسر جاسازیشده در Runtime.
- **سیستم ماژولار و استاندارد:**
زبان Nexon به گونهای طراحی شده است که تمامی امکانات مورد نیاز برای توسعه پروژههای پیچیده در حوزههای مختلف (مانند محاسبات علمی، فیزیک، رمزنگاری، پردازش دادههای حجیم و غیره) در اختیار توسعهدهنده قرار میگیرد.
- **دستورات جامع و متنوع:**
Nexon دارای دستورات متعددی برای اجرای کد، بستهبندی فایلها به صورت ZIP، نصب کتابخانهها، تولید کد C++، کامپایل به فایلهای native (مثل .exe در ویندوز)، اجرای حالت دیباگ و همچنین اجرای کدهای Python است.
- **رابط کاربری خط فرمان پیشرفته:**
ابزار Nexon از دستورات خط فرمان پشتیبانی میکند تا توسعهدهندگان بتوانند به راحتی کدهای خود را اجرا، دیباگ، بستهبندی و نصب نمایند.
---
### ۱.۲. الگوریتم کارکرد زبان Nexon
الگوریتم کارکرد زبان Nexon از چندین بخش کلیدی تشکیل شده است:
1. **Lexer (تجزیهکننده واژهای):**
- ورودی: کد منبع به صورت رشتهای.
- خروجی: توکنهایی که نشاندهندهی اجزای نحوی کد (مانند کلمات کلیدی، شناسهها، اعداد و عملگرها) هستند.
- الگوریتم: استفاده از توابع پیشرفته برای رد کردن فاصلهها، شناسایی الگوهای عددی و متنی، و تولید توکنهای مناسب.
2. **Parser (تجزیهکننده نحوی):**
- ورودی: توکنهای تولیدشده توسط Lexer.
- خروجی: درخت نحوی انتزاعی (AST) که ساختار کد منبع را نشان میدهد.
- الگوریتم: استفاده از روشهای تجزیهی نزولی (Recursive Descent) با پشتیبانی از اولویت عملگرها و کنترل خطاهای نحوی برای تولید یک AST دقیق و کامل.
3. **Semantic Analysis (تحلیل معنایی):**
- در نسخههای پیشرفته، این بخش شامل بررسی نوعها، همگامسازی نامها و مدیریت محدوده (scoping) میشود.
- الگوریتم: اعمال قوانین معنایی به AST تولیدشده جهت اطمینان از صحت کد و آمادهسازی آن برای تولید کد.
4. **Code Generation (تولید کد):**
- ورودی: AST تحلیل شده.
- خروجی: LLVM IR بهینهشده که سپس توسط LLVM به کد ماشین نهایی تبدیل میشود.
- الگوریتم: استفاده از IRBuilder برای ایجاد بلوکهای پایه و تولید کد ماشین به صورت بهینه. بهینهسازیهای متعددی نیز با استفاده از passهای LLVM اعمال میشود.
5. **Runtime Environment (محیط زمان اجرا):**
- وظیفه: فراهم آوردن زیرساختهای لازم برای اجرای کد تولیدشده، شامل مدیریت حافظه، پردازش موازی و شتابدهی GPU.
- الگوریتم: راهاندازی و پایاندهی به محیط اجرا، بارگذاری کتابخانههای استاندارد، و ادغام مفسر Python جهت پشتیبانی از کتابخانههای Python.
6. **Packaging and Installation (بستهبندی و نصب):**
- وظیفه: فراهم آوردن ابزارهایی برای بستهبندی فایلهای پروژه به صورت آرشیو ZIP و نصب کتابخانهها در مسیرهای مشخص.
- الگوریتم: استفاده از توابع فایل و سیستمعامل جهت ایجاد آرشیوها و مدیریت مسیرهای سیستم (PATH).
7. **Integration with C++ and Python Libraries:**
- امکان استفاده از تمامی کتابخانههای استاندارد C++ بهطور مستقیم از طریق دستورات #include.
- ادغام کامل با کتابخانههای Python از طریق استفاده از مفسر جاسازیشده Python در Runtime که اجازه میدهد کاربران کدهای Python خود را اجرا کنند.
---
## بخش ۲: نحوه استفاده از Nexon
### ۲.۱. نصب پروژه
پروژه Nexon در GitHub به نشانی [https://github.com/mr-r0ot/Nexon](https://github.com/mr-r0ot/Nexon) قرار دارد. برای نصب و استفاده از پروژه مراحل زیر را دنبال کنید:
1. **دانلود مخزن (Repository):**
با استفاده از Git مخزن پروژه را دانلود کنید:
```bash
git clone https://github.com/mr-r0ot/Nexon.git
```
یا فایلهای پروژه را به صورت ZIP دانلود و استخراج کنید.
2. **نصب وابستگیها:**
برای نصب وابستگیهای لازم (شامل LLVM، CUDA، Python3 و...) میتوانید از اسکریپت install.py استفاده کنید.
برای اجرای آن در محیط Python:
```bash
python install.py
```
این اسکریپت ابتدا سیستم عامل را شناسایی میکند، بررسی میکند که آیا یک کامپایلر C++ (g++/clang++/cl) نصب است یا خیر و سپس در صورت نیاز از طریق ابزارهای native نصب میکند. همچنین کتابخانههای لازم مانند LLVM و CUDA را نصب و پیکربندی میکند.
3. **کامپایل پروژه:**
پس از نصب وابستگیها، به پوشه اصلی پروژه بروید و از CMake استفاده کنید:
```bash
cmake -S . -B build
cmake --build build
```
پس از موفقیتآمیز بودن ساخت، فایل اجرایی Nexon در پوشه bin/ یا build/ قرار میگیرد.
---
### ۲.۲. استفاده از Nexon
بعد از نصب و کامپایل پروژه، میتوانید از دستورات خط فرمان Nexon برای اجرای پروژه استفاده کنید. در زیر توضیحات کامل دستورات آورده شده است:
#### 2.2.1. اجرای فایل منبع Nexon (.xon)
برای اجرای یک فایل منبع Nexon بهصورت زیر عمل کنید:
```bash
nexon run test.xon
```
این دستور، فایل `test.xon` را خوانده، توسط Lexer و Parser تجزیه میکند، کد تولید شده (LLVM IR) را بهینهسازی و سپس اجرا میکند.
#### 2.2.2. بستهبندی فایلها به صورت ZIP
برای بستهبندی چند فایل به صورت یک آرشیو ZIP:
```bash
nexon package file1.txt file2.txt -o library.zip
```
این دستور فایلهای `file1.txt` و `file2.txt` را در یک فایل ZIP به نام `library.zip` قرار میدهد.
#### 2.2.3. نصب کتابخانه از فایل ZIP
برای نصب یک کتابخانه از یک فایل ZIP:
```bash
nexon install library.zip -d C:\Path\To\Install
```
این دستور کتابخانه موجود در `library.zip` را به دایرکتوری `C:\Path\To\Install` استخراج میکند و در صورت عدم وجود در PATH، از شما میپرسد که آیا آن را به PATH اضافه کند.
#### 2.2.4. کامپایل کردن Nexon به فایل اجرایی native (.exe در ویندوز)
برای کامپایل یک فایل Nexon به یک باینری native:
```bash
nexon compile source.xon -o output.exe
```
این دستور فایل `source.xon` را به یک فایل C++ میتبدد (که شامل تمامی دستورات و کتابخانههای C++ است) و سپس با استفاده از کامپایلر سیستم به یک فایل اجرایی native (مثلاً output.exe در ویندوز) کامپایل میکند.
#### 2.2.5. تولید فایل C++ از Nexon
برای تولید یک فایل C++ کامل از یک فایل Nexon:
```bash
nexon generate-cpp source.xon -o output.cpp
```
این دستور فایل `source.xon` را به یک فایل C++ تبدیل میکند. در فایل خروجی، تمامی دستورات و ارجاعات به کتابخانههای استاندارد C++ به صورت مستقیم قرار دارند.
#### 2.2.6. اجرای حالت دیباگ
برای اجرای فایل Nexon در حالت دیباگ (با خروجیهای تشخیصی کامل):
```bash
nexon debug source.xon
```
این دستور علاوه بر اجرای کد، اطلاعات دقیقی از مراحل اجرای برنامه (مانند تعداد تکرارها، پیشرفت حلقهها و...) نمایش میدهد.
#### 2.2.7. اجرای کد Python از طریق مفسر جاسازیشده
برای اجرای یک فایل Python از طریق مفسر جاسازیشده:
```bash
nexon pyrun script.py
```
این دستور فایل `script.py` را خوانده و توسط محیط Python جاسازیشده اجرا میکند. در این حالت میتوانید از تمامی کتابخانههای Python استفاده نمایید.
---
### ۲.۳. نحوه استفاده از کتابخانههای C++ و Python در Nexon
یکی از ویژگیهای برجستهی Nexon این است که کاربران میتوانند به صورت مستقیم از کتابخانههای استاندارد C++ و همچنین کتابخانههای Python استفاده کنند.
#### 2.3.1. استفاده از کتابخانههای C++
برای استفاده از کتابخانههای C++ در کدهای Nexon، کافی است در ابتدای فایل منبع Nexon از دستور `#include` استفاده کنید. به عنوان مثال:
```xon
#include
#include
```
این دستورات به صورت مستقیم به فایل C++ تولیدشده ترجمه شده و در زمان کامپایل، کتابخانههای استاندارد C++ به برنامه اضافه میشوند.
#### 2.3.2. استفاده از کتابخانههای Python
در بخش Runtime، مفسر Python جاسازیشده راهاندازی شده است. برای استفاده از کتابخانههای Python در کدهای Nexon، کاربران میتوانند از دستور `pyrun` استفاده کنند. به عنوان مثال، اگر بخواهید کتابخانهی NumPy را در کد Python خود استفاده کنید، فایل Python شما میتواند به شکل زیر باشد:
```python
import numpy as np
def compute_array():
arr = np.array([1, 2, 3, 4, 5])
print("Array:", arr)
print("Mean:", np.mean(arr))
compute_array()
```
سپس اجرای دستور:
```bash
nexon pyrun numpy_example.py
```
این کد توسط محیط Python جاسازیشده اجرا شده و خروجی مربوطه را نمایش میدهد.
---
## بخش ۳: الگوریتم و معماری زبان Nexon
### 3.1. ساختار کلی سیستم Nexon
سیستم Nexon شامل چندین جزء اصلی است:
- **Lexer:** وظیفه تجزیه ورودی متنی (کد منبع) به توکنها را دارد.
- **Parser:** توکنهای تولیدشده را به یک درخت نحوی انتزاعی (AST) تبدیل میکند.
- **Semantic Analysis:** تحلیل معنایی AST جهت بررسی نوعها، نامگذاری و صحت کد.
- **Code Generation:** استفاده از LLVM برای تولید کد ماشین از AST به صورت IR و بهینهسازی آن.
- **Runtime Environment:** فراهم کردن زیرساختهای لازم جهت اجرای کد تولیدشده (مدیریت حافظه، پردازش موازی، GPU acceleration و مفسر Python جاسازیشده).
- **Toolchain:** شامل ابزارهایی برای بستهبندی، نصب، کامپایل، تولید کد C++، دیباگ و اجرای کد Python.
### 3.2. الگوریتمهای اصلی کارکرد
#### 3.2.1. Lexer
الگوریتم Lexer بهصورت زیر عمل میکند:
- **ورودی:** کد منبع به صورت یک رشته.
- **خروجی:** توکنهای استخراجشده.
- **مراحل:**
1. رد کردن فاصلهها و کاراکترهای سفید.
2. شناسایی الگوهای عددی، شناسهها و کلمات کلیدی.
3. تولید توکن مناسب برای هر جزء.
- **پیادهسازی:**
از توابع استاندارد C++ مانند `std::isspace` و `std::isalnum` استفاده میشود تا توکنها به صورت دقیق استخراج شوند.
#### 3.2.2. Parser
الگوریتم Parser مراحل زیر را طی میکند:
- **ورودی:** توکنهای تولید شده توسط Lexer.
- **خروجی:** درخت نحوی انتزاعی (AST).
- **مراحل:**
1. استفاده از روش تجزیه نزولی (Recursive Descent) برای پردازش توکنها.
2. پشتیبانی از اولویت عملگرها.
3. تولید گرههای AST برای اعداد، متغیرها، عملگرهای باینری و فراخوانی توابع.
- **پیادهسازی:**
کدهای Parser به صورت تولیدی نوشته شده و خطاهای نحوی را با پیامهای دقیق گزارش میدهد.
#### 3.2.3. Semantic Analysis
اگرچه در این نسخه پایهای از تحلیل معنایی پیادهسازی شده است، در نسخههای پیشرفتهتر باید موارد زیر اضافه شود:
- بررسی نوعها (Type Checking)
- حل اشکال نامگذاری (Name Resolution)
- مدیریت محدودهها (Scoping)
#### 3.2.4. Code Generation
کد تولید شده از طریق LLVM IR تولید میشود:
- **مراحل:**
1. تبدیل AST به LLVM IR با استفاده از IRBuilder.
2. اعمال بهینهسازیهای سطح پایین با استفاده از LLVM Passes.
3. تولید نهایی کد ماشین.
- **پیادهسازی:**
کدهای تولید کد در بخش CodeGen به صورت تولیدی پیادهسازی شده و بهینهسازیهای استاندارد مانند Instruction Combining، Reassociation، GVN و CFG Simplification را اعمال میکند.
#### 3.2.5. Runtime Environment
محیط زمان اجرا در Nexon شامل موارد زیر است:
- راهاندازی محیط زمان اجرا (Runtime::initialize)
- پایاندهی به منابع (Runtime::shutdown)
- ادغام کامل مفسر Python برای پشتیبانی از کتابخانههای Python
- استفاده از پردازش موازی و GPU acceleration برای اجرای سریع کدهای تولید شده
#### 3.2.6. Toolchain (بستهبندی، نصب، کامپایل، دیباگ و تولید C++)
ابزارهای خط فرمان Nexon امکانات زیر را فراهم میکنند:
- **run:** اجرای فایل منبع Nexon (.xon)
- **package:** بستهبندی چند فایل به یک آرشیو ZIP
- **install:** نصب کتابخانهها از طریق استخراج فایل ZIP و تنظیم PATH
- **compile:** تبدیل و کامپایل فایل Nexon به یک باینری native (مانند .exe)
- **generate-cpp:** تولید یک فایل C++ تولیدی از کد Nexon
- **debug:** اجرای فایل منبع در حالت دیباگ با خروجیهای تشخیصی
- **pyrun:** اجرای فایل Python از طریق مفسر جاسازیشده
---
## بخش ۴: نحوه استفاده از Nexon
### 4.1. دانلود و نصب پروژه
1. **دانلود مخزن:**
با استفاده از دستور زیر میتوانید پروژه Nexon را از GitHub دانلود کنید:
```bash
git clone https://github.com/mr-r0ot/Nexon.git
```
یا از طریق مرورگر به آدرس [https://github.com/mr-r0ot/Nexon](https://github.com/mr-r0ot/Nexon) مراجعه کنید و فایل ZIP پروژه را دانلود نمایید.
2. **نصب وابستگیها:**
فایل `install.py` موجود در ریشهی پروژه تمامی وابستگیهای سیستم (مانند کامپایلر C++، LLVM، CUDA و Python3) را شناسایی و در صورت نیاز نصب میکند.
برای اجرای این فایل:
```bash
python install.py
```
این اسکریپت ابتدا سیستم عامل را شناسایی میکند، بررسی میکند که آیا کامپایلر C++ (g++ یا clang++) نصب است یا خیر، سپس در صورت نیاز وابستگیها را نصب میکند.
3. **کامپایل پروژه با CMake:**
پس از نصب وابستگیها، وارد پوشه ریشه پروژه شده و از دستورات زیر استفاده کنید:
```bash
cmake -S . -B build
cmake --build build
```
فایل اجرایی Nexon در پوشه `bin/` یا `build/` تولید میشود.
---
### 4.2. استفاده از Nexon
پس از ساخت پروژه، فایل اجرایی Nexon را از خط فرمان با دستورات زیر اجرا کنید:
#### اجرای فایل منبع Nexon (.xon)
برای اجرای یک فایل منبع به نام `test.xon`:
```bash
nexon run test.xon
```
این دستور فایل `test.xon` را خوانده، توسط Lexer و Parser تجزیه میکند، کد تولید شده (LLVM IR) را بهینه میکند و سپس اجرا میکند.
#### بستهبندی فایلها به صورت ZIP
برای بستهبندی چند فایل به یک آرشیو ZIP:
```bash
nexon package file1.txt file2.txt -o library.zip
```
این دستور فایلهای `file1.txt` و `file2.txt` را به صورت یک فایل ZIP تولید میکند.
#### نصب کتابخانه از فایل ZIP
برای نصب کتابخانه از فایل ZIP:
```bash
nexon install library.zip -d C:\Path\To\Install
```
این دستور کتابخانه را در مسیر تعیینشده استخراج کرده و در صورت عدم وجود در PATH، از شما درخواست افزودن آن را میکند.
#### کامپایل Nexon به فایل اجرایی native
برای تبدیل یک فایل Nexon (مثلاً `source.xon`) به یک فایل اجرایی native (مثلاً `output.exe` در ویندوز):
```bash
nexon compile source.xon -o output.exe
```
این دستور کد Nexon را به یک فایل C++ ترجمه کرده و سپس آن را کامپایل میکند.
#### تولید فایل C++ از Nexon
برای تولید فایل C++ از کد Nexon:
```bash
nexon generate-cpp source.xon -o output.cpp
```
این دستور کد Nexon را به یک فایل C++ کامل تولید میکند که میتوانید آن را به صورت مستقل کامپایل کنید.
#### اجرای حالت دیباگ
برای اجرای فایل Nexon در حالت دیباگ (با خروجیهای تشخیصی دقیق):
```bash
nexon debug source.xon
```
این حالت جزئیات دقیقی از مراحل اجرا مانند تکرار حلقهها، عملکرد توابع و سایر اطلاعات دیباگ را نمایش میدهد.
#### اجرای کد Python با استفاده از مفسر جاسازیشده
برای اجرای یک فایل Python به نام `script.py`:
```bash
nexon pyrun script.py
```
این دستور فایل Python را خوانده و توسط مفسر Python جاسازیشده اجرا میکند. در این حالت میتوانید از تمامی کتابخانههای Python استفاده نمایید.
#### نمایش راهنما
برای مشاهدهی تمامی دستورات و گزینههای موجود:
```bash
nexon help
```
---
### 4.3. نحوه استفاده از کتابخانههای C++ و Python در Nexon
یکی از ویژگیهای برجستهی Nexon این است که توسعهدهندگان میتوانند به راحتی از کتابخانههای استاندارد C++ و کتابخانههای Python استفاده کنند.
#### استفاده از کتابخانههای C++
در فایلهای Nexon (.xon) کاربران میتوانند دستورات زیر را به صورت مستقیم وارد کنند:
```xon
#include
#include
#include
```
این دستورات به هنگام تولید فایل C++، به همان صورت به فایل تولیدشده منتقل میشوند و امکان استفاده از تمام کتابخانههای استاندارد C++ را فراهم میآورند.
#### استفاده از کتابخانههای Python
با استفاده از مفسر Python جاسازیشده در بخش Runtime، کاربران میتوانند از کتابخانههای Python مانند NumPy، pandas، matplotlib و سایر کتابخانههای محبوب استفاده کنند. برای مثال، یک فایل Python میتواند به صورت زیر باشد:
```python
import numpy as np
def compute_statistics():
data = np.array([1, 2, 3, 4, 5])
print("Data:", data)
print("Mean:", np.mean(data))
print("Standard Deviation:", np.std(data))
compute_statistics()
```
سپس اجرای دستور:
```bash
nexon pyrun stats.py
```
کد Python اجرا شده و خروجی مربوطه نمایش داده میشود.
---
## بخش ۵: معماری و الگوریتم کارکرد Nexon
### 5.1. معماری کلی سیستم
سیستم Nexon شامل ماژولهای زیر است:
- **Lexer:** تجزیه کد منبع به توکنهای نحوی دقیق.
- **Parser:** تبدیل توکنها به یک درخت نحوی انتزاعی (AST) با استفاده از الگوریتمهای بازگشتی.
- **Semantic Analyzer:** تحلیل معنایی AST جهت بررسی صحت کد و تعیین نوعها (در نسخههای پیشرفته).
- **Code Generation:** استفاده از LLVM برای تولید IR و تبدیل آن به کد ماشین بهینه.
- **Optimizer:** اجرای مجموعهای از بهینهسازیهای پیشرفته روی LLVM IR.
- **Runtime Environment:** محیط زمان اجرا که شامل مدیریت حافظه، پردازش موازی، GPU acceleration و مفسر Python جاسازیشده است.
- **Toolchain:** ابزارهای خط فرمان (run، package، install، compile، generate-cpp، debug، pyrun) برای اجرای کامل پروژه.
- **ادغام کتابخانههای C++ و Python:** کاربران میتوانند به صورت مستقیم از کتابخانههای C++ استفاده و همچنین از طریق مفسر Python از کتابخانههای Python بهره ببرند.
### 5.2. الگوریتمهای اصلی
#### 5.2.1. Lexer
- **ورودی:** یک رشته متنی حاوی کد منبع Nexon.
- **خروجی:** مجموعهای از توکنها.
- **الگوریتم:**
- رد کردن فاصلهها و کاراکترهای سفید.
- شناسایی الگوهای عددی (شامل اعشار) و متنی (شناسهها و کلمات کلیدی).
- تولید توکنهای دقیق برای اعداد، شناسهها و عملگرها.
#### 5.2.2. Parser
- **ورودی:** توکنهای تولیدشده توسط Lexer.
- **خروجی:** درخت نحوی انتزاعی (AST) که ساختار کد منبع را مدل میکند.
- **الگوریتم:**
- استفاده از روش تجزیه نزولی (Recursive Descent) جهت پشتیبانی از اولویت عملگرها.
- ایجاد گرههای AST برای اعداد، متغیرها، عملگرهای باینری و فراخوانی توابع.
- مدیریت خطاهای نحوی با گزارش دقیق.
#### 5.2.3. Semantic Analysis
- **ورودی:** AST تولیدشده توسط Parser.
- **خروجی:** AST اصلاحشده با بررسی نوعها و نامگذاری.
- **الگوریتم:**
- بررسی تطابق نوعها (Type Checking).
- حل اشکال نامگذاری و مدیریت محدوده (Scoping).
- در نسخههای پیشرفته، افزودن پشتیبانی از ویژگیهای چندریختی.
#### 5.2.4. Code Generation
- **ورودی:** AST تحلیلشده.
- **خروجی:** LLVM IR بهینهشده که سپس به کد ماشین تبدیل میشود.
- **الگوریتم:**
- استفاده از IRBuilder جهت تولید بلوکهای پایه و کدهای سطح پایین.
- اعمال بهینهسازیهای استاندارد مانند Instruction Combining، Reassociation، Global Value Numbering (GVN) و CFG Simplification.
- تبدیل نهایی LLVM IR به کد ماشین native.
#### 5.2.5. Runtime Environment
- **وظیفه:**
- راهاندازی محیط زمان اجرا و بارگذاری کتابخانههای استاندارد.
- مدیریت حافظه و اجرای عملیات پردازش موازی.
- استفاده از GPU برای شتابدهی محاسبات سنگین.
- ادغام مفسر Python جهت اجرای کدهای Python در کنار کدهای Nexon.
- **الگوریتم:**
- راهاندازی اولیه با فراخوانی توابع Runtime::initialize() و initializePython().
- پایاندهی صحیح با استفاده از Runtime::shutdown() و finalizePython().
#### 5.2.6. Toolchain (بستهبندی، نصب، کامپایل، تولید C++، دیباگ)
- **بستهبندی (package):**
- خواندن فایلهای مشخصشده، ادغام آنها و تولید یک فایل ZIP.
- **نصب (install):**
- استخراج فایل ZIP در دایرکتوری تعیینشده و بررسی تنظیم PATH.
- **کامپایل (compile):**
- ترجمه کد Nexon به یک فایل C++ میانی و سپس کامپایل آن به باینری native.
- **تولید C++ (generate-cpp):**
- تولید یک فایل C++ کامل از کد Nexon به طوری که تمامی دستورات #include برای کتابخانههای C++ حفظ شود.
- **دیباگ (debug):**
- اجرای کد با نمایش اطلاعات تشخیصی دقیق.
- **اجرای Python (pyrun):**
- اجرای کدهای Python از طریق مفسر جاسازیشده Python.
#### 5.2.7. ادغام کتابخانههای C++ و Python
- **استفاده از کتابخانههای C++:**
- کاربران میتوانند به سادگی از دستورات #include در کد Nexon استفاده کنند تا کتابخانههای استاندارد C++ به کد تولید شده انتقال یابد.
- **استفاده از کتابخانههای Python:**
- با استفاده از دستورات pyrun، کدهای Python (که میتوانند شامل import کتابخانههای محبوب مانند NumPy، pandas، matplotlib باشند) توسط محیط Python جاسازیشده اجرا میشوند.
---
## بخش ۶: نحوه استفاده از Nexon (راهنمای جامع)
### 6.1. دانلود و نصب پروژه
1. **دانلود مخزن:**
- به آدرس [https://github.com/mr-r0ot/Nexon](https://github.com/mr-r0ot/Nexon) بروید.
- با استفاده از Git، مخزن را دانلود کنید:
```bash
git clone https://github.com/mr-r0ot/Nexon.git
```
- یا فایل ZIP پروژه را دانلود و استخراج نمایید.
2. **نصب وابستگیها:**
- فایل `install.py` موجود در ریشه پروژه تمامی وابستگیهای لازم (C++ compiler، LLVM، CUDA، Python3) را شناسایی و نصب میکند.
- برای اجرای آن:
```bash
python install.py
```
- این اسکریپت بهطور خودکار سیستم عامل شما را شناسایی کرده و در صورت نیاز دستورالعمل نصب کامپایلر و سایر وابستگیها را اجرا میکند.
3. **پیکربندی و ساخت پروژه:**
- از پوشه ریشه پروژه، دستورات زیر را اجرا کنید:
```bash
cmake -S . -B build
cmake --build build
```
- فایل اجرایی Nexon در پوشه `bin/` یا `build/` تولید میشود.
---
### 6.2. اجرای پروژه Nexon
پس از ساخت پروژه، از فایل اجرایی Nexon با دستورات مختلف استفاده کنید:
#### 6.2.1. اجرای فایل منبع Nexon (.xon)
برای اجرای یک فایل منبع به نام `test.xon`:
```bash
nexon run test.xon
```
این دستور فایل `test.xon` را توسط Lexer و Parser تجزیه و سپس اجرا میکند.
#### 6.2.2. بستهبندی فایلها به صورت ZIP
برای بستهبندی چند فایل به صورت یک آرشیو ZIP:
```bash
nexon package file1.txt file2.txt -o library.zip
```
این دستور فایلهای `file1.txt` و `file2.txt` را در یک فایل ZIP به نام `library.zip` قرار میدهد.
#### 6.2.3. نصب کتابخانه از فایل ZIP
برای نصب یک کتابخانه از یک فایل ZIP:
```bash
nexon install library.zip -d C:\Path\To\Install
```
این دستور کتابخانه را در دایرکتوری مشخص استخراج میکند و در صورت نبود، از شما درخواست میکند که آن را به PATH اضافه کنید.
#### 6.2.4. کامپایل Nexon به باینری native
برای کامپایل یک فایل Nexon به یک فایل اجرایی native:
```bash
nexon compile source.xon -o output.exe
```
این دستور کد Nexon را به یک فایل C++ میانی ترجمه کرده و سپس با استفاده از کامپایلر سیستم، به باینری native (مثلاً output.exe) تبدیل میکند.
#### 6.2.5. تولید فایل C++ از Nexon
برای تولید یک فایل C++ از کد Nexon:
```bash
nexon generate-cpp source.xon -o output.cpp
```
این دستور، تمامی کدهای Nexon را به صورت یک فایل C++ کامل انتقال میدهد که شامل تمامی دستورهای #include میشود.
#### 6.2.6. اجرای حالت دیباگ
برای اجرای فایل Nexon در حالت دیباگ:
```bash
nexon debug source.xon
```
در این حالت، جزئیات دقیق مراحل اجرای کد مانند تکرار حلقهها و اطلاعات عملکردی نمایش داده میشود.
#### 6.2.7. اجرای کد Python از طریق مفسر جاسازیشده
برای اجرای یک فایل Python به نام `script.py`:
```bash
nexon pyrun script.py
```
در این حالت، کد Python توسط مفسر جاسازیشده اجرا شده و امکان استفاده از کتابخانههای Python مانند NumPy، pandas و ... فراهم میشود.
---
### 6.3. نحوه استفاده از کتابخانههای C++ و Python در کد Nexon
#### 6.3.1. استفاده از کتابخانههای C++
کاربران میتوانند به راحتی از تمامی کتابخانههای استاندارد C++ در کدهای Nexon استفاده کنند. کافی است در ابتدای فایل Nexon از دستور `#include` استفاده شود. به عنوان مثال:
```xon
#include
#include
#include
```
این دستورات به همان صورت در فایل C++ تولیدشده باقی میمانند و امکان استفاده از کتابخانههای C++ را در پروژه فراهم میکنند.
#### 6.3.2. استفاده از کتابخانههای Python
با استفاده از مفسر Python جاسازیشده در بخش Runtime، کاربران میتوانند از کتابخانههای Python استفاده کنند. برای مثال، یک فایل Python به صورت زیر نوشته میشود:
```python
import numpy as np
def compute_statistics():
data = np.array([1, 2, 3, 4, 5])
print("Data:", data)
print("Mean:", np.mean(data))
print("Standard Deviation:", np.std(data))
compute_statistics()
```
سپس با دستور:
```bash
nexon pyrun stats.py
```
این کد توسط مفسر Python اجرا شده و خروجی مربوطه نمایش داده میشود.
---
## بخش ۷: الگوریتمهای کارکرد Nexon
### 7.1. Lexer
- **هدف:** تبدیل کد منبع Nexon به توکنهای نحوی.
- **الگوریتم:**
- رد کردن کاراکترهای سفید با استفاده از توابع استاندارد مانند `std::isspace`.
- شناسایی اعداد، شناسهها، کلمات کلیدی و عملگرها با استفاده از الگوریتمهای دقیق.
- تولید توکنهای مناسب به صورت real.
### 7.2. Parser
- **هدف:** تبدیل توکنهای تولیدشده توسط Lexer به درخت نحوی انتزاعی (AST).
- **الگوریتم:**
- استفاده از روش تجزیه نزولی (Recursive Descent) برای پردازش توکنها.
- پشتیبانی از اولویت عملگرها و تولید گرههای AST برای اعداد، متغیرها و فراخوانی توابع.
- گزارش خطاهای نحوی به صورت دقیق و تولید خروجی مناسب.
### 7.3. Semantic Analysis
- **هدف:** بررسی معنایی AST جهت اطمینان از صحت کد.
- **الگوریتم:**
- بررسی تطابق نوعها، حل اشکال نامگذاری و مدیریت محدودهها.
- در نسخههای پیشرفته، پشتیبانی از ویژگیهای چندریختی و overload کردن عملگرها.
### 7.4. Code Generation
- **هدف:** تولید کد ماشین از AST به کمک LLVM.
- **الگوریتم:**
- استفاده از IRBuilder برای تولید بلوکهای پایه.
- اعمال بهینهسازیهای پیشرفته مانند Instruction Combining، Reassociation، GVN و CFG Simplification.
- تبدیل نهایی LLVM IR به کد ماشین native.
### 7.5. Runtime Environment
- **هدف:** فراهم کردن زیرساختهای اجرای کد تولیدشده.
- **الگوریتم:**
- راهاندازی محیط زمان اجرا با بارگذاری کتابخانههای استاندارد.
- مدیریت حافظه، پردازش موازی و استفاده از GPU.
- ادغام مفسر Python جهت اجرای کدهای Python و استفاده از کتابخانههای آن.
### 7.6. Toolchain
- **بستهبندی (package):**
- خواندن فایلها و ادغام آنها در یک آرشیو ZIP با استفاده از توابع فایل سیستم.
- **نصب (install):**
- استخراج فایل ZIP به دایرکتوری مشخص و افزودن آن به PATH در صورت نیاز.
- **کامپایل (compile):**
- تولید یک فایل C++ میانی از کد Nexon و کامپایل آن به باینری native.
- **تولید C++ (generate-cpp):**
- ترجمه کامل کد Nexon به یک فایل C++ که تمامی ارجاعات به کتابخانههای C++ حفظ میشود.
- **دیباگ (debug):**
- اجرای کد در حالت دیباگ با نمایش اطلاعات عملکردی دقیق.
- **اجرای Python (pyrun):**
- اجرای کد Python به کمک مفسر جاسازیشده برای بهرهگیری از کتابخانههای Python.
### 7.7. ادغام کتابخانههای C++ و Python
- **کتابخانههای C++:**
کاربران با استفاده از دستورات #include میتوانند از تمامی کتابخانههای استاندارد C++ استفاده کنند.
- **کتابخانههای Python:**
از طریق دستورات pyrun میتوانند به سادگی کدهای Python را اجرا و از کتابخانههای آن بهره ببرند.
---
## بخش ۸: سینتکس زبان Nexon
### 8.1. معرفی سینتکس
زبان Nexon به گونهای طراحی شده که برای برنامهنویسان همخوان، خوانا و قدرتمند باشد. سینتکس Nexon از الگوهایی مشابه با زبانهای C، C++ و Python بهره میگیرد تا یادگیری آن آسان و در عین حال انعطافپذیر باشد.
### 8.2. اجزای اصلی سینتکس Nexon
- **دستور تعریف تابع:**
برای تعریف یک تابع از کلمه کلیدی `def` استفاده میشود.
مثال:
```xon
def functionName(arg1, arg2)
// Function body
end
```
- **متغیرها و عملگرها:**
متغیرها به صورت پویا تعریف میشوند. عملگرهای ریاضی (+, -, *, /) و منطقی (==, !=, <, >, <=, >=) به صورت استاندارد ارائه شدهاند.
- **کنترل جریان:**
از دستورات شرطی `if ... then ... else ... end` و حلقههای `while ... do ... end` برای کنترل جریان استفاده میشود.
مثال:
```xon
if condition then
// code if true
else
// code if false
end
```
- **وارد کردن کتابخانههای C++:**
کاربران میتوانند از دستور `#include` در ابتدای فایلهای Nexon استفاده کنند تا کتابخانههای C++ به صورت مستقیم به کد تولیدشده اضافه شوند.
- **وارد کردن کتابخانههای Python:**
از طریق استفاده از دستور `pyrun` میتوانند کدهای Python را اجرا کنند.
### 8.3. توضیح جزئیات سینتکس به صورت جامع
#### 8.3.1. تعریف توابع
در Nexon، تعریف توابع بهصورت زیر انجام میشود:
```xon
def sum(a, b)
a + b
end
```
این تابع دو عدد را گرفته و مجموع آنها را برمیگرداند. تمامی توابع در Nexon باید با کلمه کلیدی `def` شروع و با `end` پایان یابند. پارامترها در داخل پرانتز ذکر میشوند و بدنه تابع شامل دستوراتی است که به ترتیب اجرا میشوند.
#### 8.3.2. متغیرها
متغیرها در Nexon به صورت پویا تعریف میشوند. نیازی به اعلان نوع نیست و نوع متغیر در زمان اجرا مشخص میشود. به عنوان مثال:
```xon
def main()
var x = 10
var y = 20
print("Sum: " + (x + y))
end
```
در اینجا متغیرهای `x` و `y` به صورت خودکار به عنوان اعداد تعریف شده و عملیات جمع بر روی آنها انجام میشود.
#### 8.3.3. شرطیها و حلقهها
Nexon از دستورات شرطی مشابه با سایر زبانهای برنامهنویسی استفاده میکند:
```xon
def checkNumber(num)
if num > 0 then
print("Number is positive")
else if num < 0 then
print("Number is negative")
else
print("Number is zero")
end
end
```
همچنین حلقهها به صورت زیر تعریف میشوند:
```xon
def loopExample()
var i = 0
while i < 10 do
print("Iteration: " + i)
i = i + 1
end
end
```
این ساختارها بسیار شفاف و قابل درک هستند و به توسعهدهنده اجازه میدهند تا کنترل کاملی بر روی جریان برنامه داشته باشد.
#### 8.3.4. فراخوانی توابع
فراخوانی توابع در Nexon به سادگی با نام تابع و پارامترهای آن انجام میشود:
```xon
def main()
var result = sum(5, 7)
print("Result: " + result)
end
```
در این مثال، تابع `sum` که قبلاً تعریف شده است، فراخوانی شده و خروجی آن چاپ میشود.
#### 8.3.5. استفاده از کتابخانههای C++ در کد Nexon
کاربران میتوانند در ابتدای فایلهای Nexon از دستورات `#include` استفاده کنند تا کتابخانههای C++ به صورت مستقیم به کد تولید شده اضافه شوند:
```xon
#include
#include
#include
def main()
var vec = [1, 2, 3, 4, 5]
// استفاده از تابع std::accumulate برای محاسبه مجموع
// در فایل تولیدشده C++، این دستور به همان صورت باقی میماند.
print("Vector: " + vec)
end
```
این امکان به توسعهدهندگان اجازه میدهد تا از تمامی کتابخانههای C++ استفاده کنند و به راحتی کدهای خود را گسترش دهند.
#### 8.3.6. استفاده از کتابخانههای Python در کد Nexon
برای استفاده از کتابخانههای Python در Nexon، از دستور `pyrun` استفاده میشود. به عنوان مثال، یک فایل Python به نام `stats.py` میتواند شامل موارد زیر باشد:
```python
import numpy as np
def compute_statistics():
data = np.array([10, 20, 30, 40, 50])
print("Data:", data)
print("Mean:", np.mean(data))
print("Standard Deviation:", np.std(data))
compute_statistics()
```
سپس اجرای دستور:
```bash
nexon pyrun stats.py
```
این دستور فایل `stats.py` را توسط مفسر Python جاسازیشده اجرا میکند. در نتیجه، کاربران میتوانند به راحتی از کتابخانههای Python استفاده کنند.
#### 8.3.7. دیباگ و تولید کد C++
با دستور `debug` میتوانید یک فایل Nexon را در حالت دیباگ اجرا کنید:
```xon
nexon debug mycode.xon
```
در این حالت، اطلاعات دقیقی از اجرای کد (مانند تعداد تکرارها، عملکرد توابع، و غیره) نمایش داده میشود.
همچنین با دستور `generate-cpp` میتوانید کد تولید شده (C++ source) را مشاهده و ویرایش کنید:
```xon
nexon generate-cpp mycode.xon -o mycode.cpp
```
این فایل C++ تولیدشده قابل کامپایل به صورت مستقل است.
#### 8.3.8. کامپایل به فایل اجرایی native
برای تبدیل یک فایل Nexon به یک فایل اجرایی native (مثلاً .exe در ویندوز)، دستور زیر را اجرا کنید:
```xon
nexon compile mycode.xon -o mycode.exe
```
این دستور ابتدا کد Nexon را به فایل C++ ترجمه کرده و سپس آن را به یک باینری native کامپایل میکند.
---
## بخش ۹: توضیحات تکمیلی دربارهی الگوریتمها و ساختار پروژه
### 9.1. جزئیات Lexer
Lexer ورودی کد Nexon را دریافت و آن را به توکنهای معنادار تقسیم میکند. این توکنها شامل:
- **tok_identifier:** شناسههای متغیر و نام توابع.
- **tok_number:** اعداد اعشاری و صحیح.
- **tok_def، tok_extern:** کلمات کلیدی مربوط به تعریف توابع.
- **توکنهای عملگر و جداکننده:** برای عملیات ریاضی و سایر موارد.
الگوریتم Lexer به گونهای طراحی شده که تمامی کاراکترهای سفید (فضا، تب، خط جدید) را رد کند و تنها بخشهای معنادار را استخراج نماید.
### 9.2. جزئیات Parser
Parser از الگوریتم تجزیه نزولی برای ساخت AST استفاده میکند:
- **تجزیه عبارات (Expressions):** هر عبارت ریاضی یا منطقی به گرههای AST تبدیل میشود.
- **فراخوانی توابع:** در صورتی که یک شناسه به دنبال آن پرانتز قرار گیرد، به عنوان یک فراخوانی تابع تفسیر میشود.
- **مدیریت عملگرها:** از جدول اولویت عملگرها استفاده میکند تا ترتیب عملیات به درستی رعایت شود.
- **گزارش خطا:** در صورت بروز هرگونه خطا در نحو، پیام خطای دقیق به کاربر نمایش داده میشود.
### 9.3. جزئیات تولید کد (Code Generation)
کد تولید شده توسط بخش CodeGen به وسیلهی IRBuilder و LLVM ساخته میشود:
- **تبدیل گرههای AST به LLVM IR:** هر گرهی AST تابع codegen() خاص خود را دارد.
- **بهینهسازی IR:** پس از تولید IR، مجموعهای از بهینهسازیهای استاندارد مانند Promotion، Instruction Combining و غیره اعمال میشود.
- **تولید نهایی کد ماشین:** LLVM IR به وسیلهی سیستم کامپایل به کد native تبدیل میشود.
### 9.4. جزئیات محیط زمان اجرا (Runtime)
محیط زمان اجرا (Runtime) مسئول:
- **راهاندازی و پایاندهی محیط:** با فراخوانی توابع initialize() و shutdown() محیط به صورت کامل پیکربندی و پاکسازی میشود.
- **مدیریت حافظه:** از روشهای پیشرفته مدیریت حافظه بهره میبرد.
- **ادغام Python:** با استفاده از Python C API، مفسر Python جاسازیشده راهاندازی میشود تا کاربران بتوانند کدهای Python خود را اجرا و از کتابخانههای آن استفاده کنند.
### 9.5. جزئیات پردازش موازی و GPU
سیستم Nexon از پردازش موازی واقعی بهره میبرد:
- **پردازش موازی با std::thread:** تابع parallelFor در Concurrency، وظیفه تقسیم کار و اجرای موازی حلقهها را بر عهده دارد.
- **GPU Acceleration:** در صورت وجود CUDA، عملکرد GPUAcceleration با اجرای یک kernel واقعی بر روی GPU، شتابدهی محاسبات را انجام میدهد.
### 9.6. جزئیات بستهبندی و نصب
ابزارهای خط فرمان Nexon امکانات بستهبندی و نصب را فراهم میکنند:
- **بستهبندی (package):** فایلهای ورودی را خوانده و در یک آرشیو ZIP قرار میدهد.
- **نصب (install):** آرشیو ZIP را استخراج کرده و در مسیر مشخص نصب میکند، همچنین بررسی میکند که دایرکتوری نصب در PATH سیستم موجود باشد.
### 9.7. ادغام کتابخانههای C++ و Python
یکی از قابلیتهای برجسته Nexon این است که:
- کاربران میتوانند از تمامی کتابخانههای C++ بهصورت مستقیم (از طریق `#include`) استفاده کنند.
- کاربران میتوانند کدهای Python را بهوسیلهی دستور pyrun اجرا کرده و از کتابخانههای Python بهره ببرند.
این ادغام به توسعهدهندگان اجازه میدهد تا از بهترین امکانات هر دو زبان بهره ببرند.
---
## بخش ۱۰: نحوه استفاده از Nexon توسط کاربران نهایی
### 10.1. نصب پروژه Nexon
1. **دانلود مخزن از GitHub:**
- به آدرس [https://github.com/mr-r0ot/Nexon](https://github.com/mr-r0ot/Nexon) مراجعه کرده و مخزن را دانلود یا clone نمایید.
```bash
git clone https://github.com/mr-r0ot/Nexon.git
```
2. **اجرای اسکریپت نصب (install.py):**
- با اجرای اسکریپت install.py تمامی وابستگیهای سیستم مانند کامپایلر C++، LLVM، CUDA و Python3 نصب میشوند.
```bash
python install.py
```
3. **پیکربندی و ساخت پروژه:**
- از پوشه اصلی پروژه، دستورهای زیر را اجرا کنید:
```bash
cmake -S . -B build
cmake --build build
```
- فایل اجرایی Nexon در پوشههای build یا bin ایجاد میشود.
### 10.2. اجرای Nexon
پس از ساخت پروژه، میتوانید از فایل اجرایی Nexon با دستورات مختلف استفاده کنید. به عنوان مثال:
- **اجرای فایل منبع Nexon:**
```bash
nexon run test.xon
```
- **بستهبندی فایلها:**
```bash
nexon package file1.txt file2.txt -o library.zip
```
- **نصب کتابخانه:**
```bash
nexon install library.zip -d C:\Path\To\Install
```
- **کامپایل Nexon به باینری native:**
```bash
nexon compile source.xon -o output.exe
```
- **تولید فایل C++ از Nexon:**
```bash
nexon generate-cpp source.xon -o output.cpp
```
- **اجرای حالت دیباگ:**
```bash
nexon debug source.xon
```
- **اجرای کد Python:**
```bash
nexon pyrun script.py
```
- **نمایش راهنما:**
```bash
nexon help
```
### 10.3. استفاده از کتابخانههای C++ در کد Nexon
در ابتدای فایلهای Nexon (.xon)، میتوانید از دستورات `#include` برای وارد کردن کتابخانههای استاندارد C++ استفاده کنید. برای مثال:
```xon
#include
#include
#include
def main()
print("Hello from Nexon using C++ libraries!")
end
main()
```
این کد، پس از ترجمه به C++، شامل تمام دستورات #include خواهد شد و کامپایلر میتواند از کتابخانههای C++ استفاده کند.
### 10.4. استفاده از کتابخانههای Python در کد Nexon
با استفاده از دستورات pyrun میتوانید کدهای Python را اجرا کرده و از کتابخانههای Python بهره ببرید:
```python
# فایل: stats.py
import numpy as np
def compute_statistics():
data = np.array([1, 2, 3, 4, 5])
print("Data:", data)
print("Mean:", np.mean(data))
print("Std Dev:", np.std(data))
compute_statistics()
```
سپس اجرای دستور:
```bash
nexon pyrun stats.py
```
این کد توسط مفسر Python جاسازیشده اجرا شده و خروجی مربوطه نمایش داده میشود.
---
## بخش ۱۱: الگوریتم کارکرد Nexon (توضیح دقیق)
### 11.1. الگوریتم Lexer
1. **ورودی:** کد منبع به صورت یک رشته.
2. **مراحل:**
- رد کردن فضای خالی و کاراکترهای سفید.
- شناسایی اعداد با استفاده از تابع std::strtod.
- شناسایی شناسهها و کلمات کلیدی با استفاده از std::isalnum.
- تولید توکنهای معنادار برای هر بخش.
3. **خروجی:** توکنهایی مانند tok_def، tok_identifier، tok_number و ...
### 11.2. الگوریتم Parser
1. **ورودی:** توکنهای تولید شده توسط Lexer.
2. **مراحل:**
- استفاده از Recursive Descent برای تجزیهی عبارات.
- ایجاد گرههای AST برای اعداد، متغیرها و عملگرهای باینری.
- پشتیبانی از فراخوانی توابع با استفاده از گرهی CallExprAST.
- مدیریت اولویت عملگرها با استفاده از جدول BinopPrecedence.
3. **خروجی:** یک درخت نحوی انتزاعی (AST) که ساختار کد منبع را بازنمایی میکند.
### 11.3. الگوریتم Semantic Analysis
(در نسخه تولیدی کامل، این بخش شامل تحلیل نوعها و حل مشکلات نامگذاری است، اما در این پروژه پایهای پیادهسازی شده است.)
### 11.4. الگوریتم Code Generation
1. **ورودی:** AST تولیدشده.
2. **مراحل:**
- فراخوانی متد codegen() در هر گره AST جهت تولید LLVM IR.
- استفاده از IRBuilder برای ایجاد بلوکهای پایه.
- اعمال بهینهسازیهای LLVM با استفاده از Passهای استاندارد.
3. **خروجی:** LLVM IR بهینهشده که سپس توسط LLVM به کد ماشین native تبدیل میشود.
### 11.5. الگوریتم Runtime
1. **راهاندازی:**
- فراخوانی تابع Runtime::initialize() جهت راهاندازی محیط، بارگذاری کتابخانههای استاندارد و راهاندازی مفسر Python.
2. **اجرا:**
- اجرای کد تولید شده (LLVM IR) با استفاده از محیط زمان اجرا.
- مدیریت حافظه و پردازش موازی.
3. **پایاندهی:**
- فراخوانی Runtime::shutdown() جهت آزادسازی منابع و پایان اجرای محیط.
### 11.6. الگوریتمهای اضافی Toolchain
1. **بستهبندی:**
- خواندن فایلهای ورودی و ایجاد یک آرشیو ZIP از آنها.
2. **نصب:**
- استخراج آرشیو ZIP به دایرکتوری مشخص و افزودن آن به PATH در صورت نیاز.
3. **کامپایل:**
- ترجمه کد Nexon به یک فایل C++ میانی و سپس کامپایل آن به باینری native.
4. **تولید C++:**
- تولید یک فایل C++ کامل از کد Nexon برای ویرایش و کامپایل مستقل.
5. **دیباگ:**
- اجرای کد در حالت دیباگ با نمایش اطلاعات دقیق عملکرد.
6. **اجرای Python:**
- اجرای کدهای Python با استفاده از مفسر جاسازیشده جهت استفاده از کتابخانههای Python.
---
## بخش ۱۲: نحوه استفاده از Nexon توسط کاربران نهایی (راهنمای جامع)
### 12.1. مراحل دانلود و نصب
1. **دانلود:**
- به آدرس [https://github.com/mr-r0ot/Nexon](https://github.com/mr-r0ot/Nexon) مراجعه کنید و پروژه را دانلود نمایید یا از طریق Git clone کنید:
```bash
git clone https://github.com/mr-r0ot/Nexon.git
```
2. **اجرای اسکریپت نصب:**
- فایل `install.py` را اجرا کنید:
```bash
python install.py
```
- این اسکریپت وابستگیهای سیستم (C++ compiler، LLVM، CUDA، Python3) را شناسایی و در صورت نیاز نصب میکند.
3. **کامپایل پروژه با CMake:**
- در پوشه اصلی پروژه، دستورات زیر را اجرا کنید:
```bash
cmake -S . -B build
cmake --build build
```
- فایل اجرایی Nexon در پوشههای build یا bin تولید خواهد شد.
### 12.2. اجرای پروژه Nexon
پس از ساخت پروژه، فایل اجرایی Nexon را با دستورات زیر اجرا کنید:
- **اجرای فایل منبع Nexon (.xon):**
```bash
nexon run test.xon
```
- **بستهبندی فایلها به صورت ZIP:**
```bash
nexon package file1.txt file2.txt -o library.zip
```
- **نصب کتابخانه:**
```bash
nexon install library.zip -d C:\Path\To\Install
```
- **کامپایل Nexon به باینری native:**
```bash
nexon compile source.xon -o output.exe
```
- **تولید فایل C++ از Nexon:**
```bash
nexon generate-cpp source.xon -o output.cpp
```
- **اجرای حالت دیباگ:**
```bash
nexon debug source.xon
```
- **اجرای کد Python (pyrun):**
```bash
nexon pyrun script.py
```
- **نمایش راهنما:**
```bash
nexon help
```
### 12.3. استفاده از کتابخانههای C++ و Python در Nexon
#### 12.3.1. کتابخانههای C++
در هر فایل Nexon (.xon)، توسعهدهندگان میتوانند به سادگی کتابخانههای استاندارد C++ را از طریق:
```xon
#include
#include
#include
```
اضافه کنند. این دستورات به هنگام تولید فایل C++ همانطور باقی میمانند و امکان استفاده از تمامی امکانات استاندارد C++ را فراهم میکنند.
#### 12.3.2. کتابخانههای Python
کاربران Nexon میتوانند از دستورات `pyrun` برای اجرای کدهای Python استفاده کنند. به عنوان مثال:
- **نمونه فایل Python (stats.py):**
```python
import numpy as np
def compute_statistics():
data = np.array([10, 20, 30, 40, 50])
print("Data:", data)
print("Mean:", np.mean(data))
print("Standard Deviation:", np.std(data))
compute_statistics()
```
- **اجرای فایل Python در Nexon:**
```bash
nexon pyrun stats.py
```
این ویژگی اجازه میدهد تا توسعهدهندگان از کتابخانههای قدرتمند Python بهره ببرند.
---
## بخش ۱۳: سینتکس و آموزش جامع Nexon
### 13.1. معرفی سینتکس کلی
زبان Nexon ترکیبی از ویژگیهای زبانهای C++ و Python است و سینتکس آن طوری طراحی شده است که هم برای برنامهنویسان حرفهای و هم مبتدی قابل فهم باشد. اصول اصلی سینتکس به شرح زیر است:
- **تعریف تابع:**
با کلمه کلیدی `def` آغاز و با `end` پایان مییابد.
```xon
def functionName(arg1, arg2)
// Body of function
end
```
- **تعریف متغیر:**
متغیرها به صورت پویا تعریف میشوند و نیازی به اعلان نوع ندارند.
```xon
def main()
var x = 10
var y = 20
print("Sum: " + (x + y))
end
main()
```
- **دستورات شرطی:**
از ساختارهای `if ... then ... else ... end` برای کنترل جریان استفاده میشود.
```xon
def checkValue(val)
if val > 0 then
print("Positive")
else if val < 0 then
print("Negative")
else
print("Zero")
end
end
```
- **حلقهها:**
از حلقههای `while ... do ... end` برای تکرار دستورات استفاده میشود.
```xon
def loopExample()
var i = 0
while i < 10 do
print("Iteration: " + i)
i = i + 1
end
end
```
- **فراخوانی توابع:**
توابع به سادگی با نام تابع و پارامترهای آن فراخوانی میشوند.
```xon
def main()
var result = sum(5, 7)
print("Result: " + result)
end
```
### 13.2. استفاده از کتابخانههای C++ در Nexon
در Nexon، امکان استفاده از تمامی کتابخانههای C++ استاندارد وجود دارد. توسعهدهندگان میتوانند در ابتدای فایلهای Nexon از دستورات `#include` بهصورت زیر استفاده کنند:
```xon
#include
#include
#include
def main()
print("Using C++ libraries in Nexon!")
var vec = [1, 2, 3, 4, 5]
print("Vector: " + vectorToString(vec))
end
main()
```
این دستورات در زمان تولید فایل C++ به همان صورت باقی مانده و از کتابخانههای C++ استفاده میشود.
### 13.3. استفاده از کتابخانههای Python در Nexon
برای استفاده از کتابخانههای Python، کاربران از دستور `pyrun` استفاده میکنند. در این حالت، کد Python به صورت کامل توسط مفسر Python جاسازیشده اجرا میشود.
مثال:
- **فایل Python (example.py):**
```python
import numpy as np
def compute():
data = np.array([1, 2, 3, 4, 5])
print("Data:", data)
print("Mean:", np.mean(data))
print("Standard Deviation:", np.std(data))
compute()
```
- **اجرای کد Python:**
```bash
nexon pyrun example.py
```
### 13.4. توضیح نحوهی استفاده از دستورات Nexon
دستورات اصلی Nexon شامل:
- **run:** اجرای فایلهای .xon.
- **package:** بستهبندی چند فایل به صورت ZIP.
- **install:** نصب کتابخانهها از طریق استخراج فایل ZIP و تنظیم PATH.
- **compile:** کامپایل کردن فایلهای Nexon به باینری native (مثلاً .exe).
- **generate-cpp:** تولید فایل C++ از کد Nexon.
- **debug:** اجرای حالت دیباگ با اطلاعات تشخیصی کامل.
- **pyrun:** اجرای فایلهای Python از طریق مفسر جاسازیشده.
- **help:** نمایش راهنما و دستورهای موجود.
### 13.5. مثالهای کاربردی در محیط توسعه
اگر کاربر با نصب کامل پروژه Nexon، فایلهای سورس Nexon را دانلود کند، مراحل زیر را دنبال میکند:
1. **دانلود و نصب:**
- مخزن را از [https://github.com/mr-r0ot/Nexon](https://github.com/mr-r0ot/Nexon) دانلود یا clone کنید.
- از طریق دستور `python install.py` وابستگیهای لازم نصب میشوند.
2. **کامپایل پروژه:**
```bash
cmake -S . -B build
cmake --build build
```
3. **اجرای دستورات:**
- اجرای فایل منبع:
```bash
nexon run test.xon
```
- بستهبندی:
```bash
nexon package file1.txt file2.txt -o library.zip
```
- نصب:
```bash
nexon install library.zip -d C:\Path\To\Install
```
- کامپایل به باینری:
```bash
nexon compile source.xon -o output.exe
```
- تولید فایل C++:
```bash
nexon generate-cpp source.xon -o output.cpp
```
- اجرای حالت دیباگ:
```bash
nexon debug source.xon
```
- اجرای کد Python:
```bash
nexon pyrun script.py
```
### 13.6. نحوه توسعه پروژه در Nexon
به عنوان یک زبان تولیدی، Nexon از یک ساختار ماژولار بهره میبرد. توسعهدهندگان میتوانند:
- **ماژولهای جدید اضافه کنند:** با استفاده از ساختار ماژولار Nexon، میتوانند توابع و کلاسهای جدید را در پوشههای جداگانه قرار داده و از آنها استفاده نمایند.
- **کتابخانههای خارجی را وارد کنند:** با استفاده از دستور `#include` در سورسهای Nexon، تمامی کتابخانههای C++ قابل دسترس خواهند بود.
- **کدهای Python را با استفاده از مفسر جاسازیشده اجرا کنند:** این امکان اجازه میدهد تا الگوریتمهای پیشرفته در حوزههای علم داده و یادگیری ماشین بدون نیاز به تغییر زبان اجرا شوند.
---
## بخش ۱۴: توسعه و بهبودهای آتی
### 14.1. بهبودهای پیشرفته در Lexer و Parser
- اضافه کردن پشتیبانی از دستورات کنترلی پیچیده مانند شرطیها (if/else)، حلقهها (while، for) و تعریفهای ماژول.
- پیادهسازی تحلیل معنایی کامل (Semantic Analysis) جهت بررسی نوعها و حل اشکالات اسمی.
- افزودن سیستمهای گزارش خطا پیشرفته با شماره خط و توضیحات دقیق.
### 14.2. توسعهی بخش Code Generation
- استفاده از تکنیکهای پیشرفته بهینهسازی LLVM مانند Profile-Guided Optimization (PGO) و Link-Time Optimization (LTO).
- پشتیبانی از چندین هدف (target) مختلف مانند x86، ARM و GPU.
- بهبود بخش تولید کد جهت پشتیبانی از ویژگیهای زبان مانند exception handling و dynamic linking.
### 14.3. بهبود Runtime Environment
- پیادهسازی مدیریت حافظه دقیق (مانند Garbage Collection یا smart pointers).
- افزودن امکانات پیشرفته دیباگ، لاگگیری و پروفایلینگ.
- ادغام کامل با کتابخانههای Python بهطوری که کاربران بتوانند از APIهای پیشرفته Python استفاده کنند.
### 14.4. ابزارهای خط فرمان و Packaging
- بهبود دستورات packaging و install برای پشتیبانی از سیستمهای چندسکویی و مدیریت وابستگیهای پیشرفته.
- توسعه یک Package Manager داخلی برای Nexon جهت نصب و بهروزرسانی کتابخانههای Nexon.
- افزودن امکانات CI/CD جهت تست و بهبود مستمر پروژه.
### 14.5. مستندسازی و آموزش
- ایجاد مستندات کامل برای هر ماژول با مثالهای کاربردی واقعی.
- توسعهی یک وبسایت رسمی برای Nexon جهت ارائهی آموزشهای جامع، مستندات API و نمونههای کاربردی.
- ایجاد یک محیط توسعهی یکپارچه (IDE) برای Nexon با پشتیبانی از دیباگ، تکمیل خودکار کد و ابزارهای تحلیل.
---
## بخش ۱۵: نحوه استفاده نهایی از Nexon برای یک توسعهدهنده
### 15.1. شروع به کار با Nexon
برای شروع کار با Nexon:
1. مخزن را دانلود کنید.
2. اسکریپت install.py را اجرا کنید تا تمامی وابستگیها نصب شود.
3. پروژه را با استفاده از CMake کامپایل کنید.
4. فایل اجرایی Nexon را اجرا کنید و از دستورات موجود استفاده کنید.
### 15.2. مثالهای کاربردی برای یک توسعهدهنده
- **ایجاد یک پروژه ساده:**
یک فایل `hello.xon` ایجاد کنید:
```xon
#include
def main()
print("Hello, Nexon!")
end
main()
```
سپس با دستور زیر اجرا کنید:
```bash
nexon run hello.xon
```
- **استفاده از کتابخانههای C++:**
یک فایل `vector_example.xon` بسازید:
```xon
#include
#include
#include
def main()
var vec = [5, 3, 9, 1, 7]
print("Original vector: " + vectorToString(vec))
// Sort the vector using C++ STL algorithm.
sort(vec.begin(), vec.end())
print("Sorted vector: " + vectorToString(vec))
end
main()
```
سپس:
```bash
nexon run vector_example.xon
```
- **استفاده از کتابخانههای Python:**
یک فایل Python به نام `data_analysis.py` ایجاد کنید:
```python
import numpy as np
def analyze():
data = np.array([1, 2, 3, 4, 5])
print("Data:", data)
print("Mean:", np.mean(data))
print("Std Dev:", np.std(data))
analyze()
```
سپس:
```bash
nexon pyrun data_analysis.py
```
### 15.3. نکات پیشرفته برای توسعهدهندگان
- **دیباگ و تولید کد:**
با استفاده از دستور `nexon debug` میتوانید برنامههای خود را در حالت دیباگ اجرا و اطلاعات دقیق عملکرد را مشاهده کنید.
- **کامپایل به باینری native:**
با دستور `nexon compile`، میتوانید کدهای Nexon را به فایلهای اجرایی native تبدیل کنید. این امکان به شما اجازه میدهد تا برنامههای خود را به صورت مستقل اجرا و منتشر نمایید.
- **تولید فایل C++:**
دستور `nexon generate-cpp` تمامی کدهای Nexon را به یک فایل C++ تولید میکند که میتوانید آن را مورد بررسی و ویرایش قرار دهید.
- **بستهبندی و نصب:**
با استفاده از دستورات package و install میتوانید کتابخانههای خود را به راحتی در سیستمهای دیگر نصب کنید.
---
## بخش ۱۶: دستورالعملهای نهایی برای دانلود، نصب و اجرای پروژه Nexon
### 16.1. دانلود مخزن
1. به آدرس [https://github.com/mr-r0ot/Nexon](https://github.com/mr-r0ot/Nexon) بروید.
2. مخزن را دانلود کنید یا از طریق دستور زیر آن را کلون کنید:
```bash
git clone https://github.com/mr-r0ot/Nexon.git
```
### 16.2. نصب وابستگیها
1. پوشه پروژه را باز کنید.
2. اسکریپت نصب را اجرا کنید:
```bash
python install.py
```
این اسکریپت سیستم عامل را شناسایی و در صورت نیاز کامپایلر C++، LLVM، CUDA و Python3 را نصب میکند.
### 16.3. ساخت پروژه
1. در پوشه ریشه پروژه، دستورهای زیر را اجرا کنید:
```bash
cmake -S . -B build
cmake --build build
```
2. فایل اجرایی Nexon در پوشه build یا bin تولید میشود.
### 16.4. اجرای Nexon
با استفاده از فایل اجرایی Nexon، میتوانید دستورات زیر را اجرا کنید:
- برای اجرای یک فایل منبع:
```bash
nexon run test.xon
```
- برای بستهبندی:
```bash
nexon package file1.txt file2.txt -o library.zip
```
- برای نصب:
```bash
nexon install library.zip -d C:\Path\To\Install
```
- برای کامپایل:
```bash
nexon compile source.xon -o output.exe
```
- برای تولید فایل C++:
```bash
nexon generate-cpp source.xon -o output.cpp
```
- برای اجرای حالت دیباگ:
```bash
nexon debug source.xon
```
- برای اجرای کد Python:
```bash
nexon pyrun script.py
```
- برای نمایش راهنما:
```bash
nexon help
```
### 16.5. نکات مهم نصب در ویندوز
در ویندوز، اگر کامپایلر C++ (مانند g++ از MinGW یا cl.exe از Visual Studio) نصب باشد و فایلهای باینری در PATH سیستم قرار نداشته باشند، ابتدا به پوشهی حاوی فایلهای Nexon بروید و مسیر آن را به صورت موقت یا دائمی به PATH اضافه کنید:
```cmd
cd C:\Users\tahag\Desktop\Project\0SuperProjects\Other\Nexon\src
set PATH=%PATH%;C:\Users\tahag\Desktop\Project\0SuperProjects\Other\Nexon\src
nexon.exe run test.xon
```
همچنین دستور `install` به صورت خودکار پوشه نصب را بررسی و در صورت لزوم به PATH اضافه میکند.
---
## بخش ۱۷: مستندات نهایی برای توسعهدهندگان Nexon
### 17.1. مستندات فنی
- **معماری ماژولار:**
Nexon از یک معماری ماژولار بهره میبرد که هر ماژول (Lexer، Parser، AST، CodeGen، Runtime، Concurrency، GPUAcceleration و Optimizer) به صورت جداگانه پیادهسازی شده است. این معماری امکان گسترش و بهروزرسانی آسان را فراهم میکند.
- **تکنیکهای بهینهسازی:**
در بخش CodeGen و Optimizer، از الگوریتمهای پیشرفته بهینهسازی مانند Instruction Combining، Reassociation و Global Value Numbering استفاده شده است.
- **پردازش موازی و GPU:**
سیستم Nexon از چندپردازشی (multi-threading) واقعی بهره میبرد و در صورت وجود CUDA، شتابدهی GPU به صورت واقعی اعمال میشود.
- **ادغام Python:**
با استفاده از Python C API، محیط Python در Runtime جاسازی شده و کاربران میتوانند به سادگی از کتابخانههای Python در پروژههای خود استفاده کنند.
- **مدیریت وابستگیها:**
اسکریپت install.py تمامی وابستگیهای لازم را نصب و پیکربندی میکند. این شامل نصب کامپایلر C++، LLVM، CUDA و Python3 میشود.
### 17.2. نحوه توسعه و گسترش Nexon
توسعهدهندگان میتوانند به راحتی ماژولهای جدید را اضافه و قابلیتهای موجود را بهبود بخشند. برای مثال:
- افزودن کنترلهای پیشرفته (if/else, loops, switch-case)
- گسترش Semantic Analysis جهت پشتیبانی از ویژگیهای چندریختی و Generic Programming.
- بهبود و توسعهی استاندارد کتابخانههای داخلی جهت پوشش تمامی نیازهای علمی، فیزیکی و کاربردهای پیشرفته.
- توسعه ابزارهای IDE، دیباگر و سیستمهای تست خودکار.
### 17.3. مستندسازی کامل API
تمامی کلاسها و توابع Nexon با توضیحات دقیق مستند شدهاند تا توسعهدهندگان حتی بدون آشنایی قبلی بتوانند به راحتی از امکانات استفاده کنند. برای مثال:
- **Lexer:**
توابع getNextChar، peekChar و getNextToken بهطور دقیق توضیح داده شدهاند.
- **AST و Parser:**
تمامی گرههای AST مانند NumberExprAST، VariableExprAST، BinaryExprAST و CallExprAST همراه با متدهای codegen پیادهسازی شدهاند.
- **CodeGen:**
توابع getGlobalContext، Builder و TheModule برای تولید کد و بهینهسازی کامل توضیح داده شدهاند.
- **Runtime:**
توابع initialize، shutdown، initializePython، finalizePython و executePythonCode بهصورت دقیق پیادهسازی شدهاند تا اجرای کدهای تولیدی و Python به صورت یکپارچه صورت گیرد.
### 17.4. نحوه استفاده از Nexon در پروژههای واقعی
برای شروع یک پروژه جدید در Nexon، توسعهدهنده میتواند یک فایل منبع با پسوند .xon ایجاد کند. مثال سادهای برای یک برنامه Hello World:
```xon
#include
def main()
print("Hello, Nexon!")
end
main()
```
این فایل پس از پردازش توسط سیستم Nexon به یک فایل C++ تولید شده و سپس کامپایل و اجرا میشود.
همچنین میتوان از امکانات پیشرفته مانند پردازش موازی، GPU acceleration و استفاده از کتابخانههای Python در کنار کدهای Nexon بهره برد.
---
## بخش ۱۸: راهنمای توسعهدهندگان (Developer Guide)
### 18.1. ساختار پروژه Nexon
ساختار پروژه به شرح زیر است:
```
Nexon/
├── CMakeLists.txt # تنظیمات ساخت پروژه
├── install.py # اسکریپت نصب وابستگیها
├── include/
│ └── Nexon/
│ ├── stdlib.h # توابع استاندارد و کتابخانه داخلی
│ ├── Lexer.h # تعریف Lexer
│ ├── AST.h # تعریف گرههای AST
│ ├── CodeGen.h # رابط Code Generation با LLVM
│ ├── Concurrency.h # ابزارهای پردازش موازی
│ ├── GPUAcceleration.h # ماژول شتابدهنده GPU
│ ├── Optimizer.h # بهینهسازی کد تولیدشده
│ ├── Parser.h # تعریف Parser
│ └── Runtime.h # محیط زمان اجرا و ادغام Python
├── src/
│ ├── AST.cpp # پیادهسازی AST
│ ├── CodeGen.cpp # پیادهسازی Code Generation
│ ├── Concurrency.cpp # پیادهسازی پردازش موازی
│ ├── GPUAcceleration.cpp # پیادهسازی شتابدهی GPU
│ ├── Lexer.cpp # پیادهسازی Lexer
│ ├── Optimizer.cpp # پیادهسازی بهینهسازی
│ ├── Parser.cpp # پیادهسازی Parser
│ ├── Runtime.cpp # پیادهسازی محیط زمان اجرا
│ └── nexon.cpp # فایل اصلی ابزارهای خط فرمان Nexon
└── tests/
└── test1.xon # نمونه برنامه تولیدی Nexon
```
توسعهدهندگان میتوانند ماژولهای جدید را در این ساختار اضافه کنند و از الگوی موجود برای گسترش زبان استفاده نمایند.
### 18.2. توسعه و بهبودهای آتی
در آینده میتوان موارد زیر را اضافه و بهبود بخشید:
- **Semantic Analysis پیشرفته:**
اضافه کردن تحلیل معنایی کامل با بررسی نوعها، محدودیتها و همگامسازی نامها.
- **پشتیبانی از Control Flow پیشرفته:**
اضافه کردن ساختارهای پیچیدهی شرطی و حلقههای بهینه.
- **بهبود بهینهسازی کد:**
پیادهسازی تکنیکهای پیشرفته بهینهسازی مانند PGO و LTO.
- **ادغام پیشرفته با Python:**
ایجاد APIهایی برای فراخوانی توابع Python و انتقال داده بین محیطهای C++ و Python.
- **ابزارهای توسعه:**
ایجاد یک IDE اختصاصی برای Nexon، دیباگر و سیستم تست خودکار.
### 18.3. نحوه توسعه برنامههای جدید
برای ایجاد یک پروژه جدید در Nexon، کافی است یک فایل متنی با پسوند .xon ایجاد کرده و از سینتکس استاندارد Nexon استفاده کنید. سپس میتوانید از دستورات:
- **nexon run:** برای اجرای کد.
- **nexon compile:** برای کامپایل به باینری native.
- **nexon generate-cpp:** برای تولید فایل C++ از کد Nexon.
استفاده کنید.
---
## بخش ۱۹: مستندات API و راهنمای مرجع
### 19.1. API Lexer
- **کلاس Lexer:**
- `Lexer(const std::string &input)`: سازنده با دریافت رشتهی ورودی.
- `int getNextToken()`: دریافت توکن بعدی.
- `std::string getIdentifierStr()`: برگرداندن آخرین شناسه خواندهشده.
- `double getNumVal()`: برگرداندن آخرین عدد خواندهشده.
### 19.2. API AST
- **کلاس ExprAST:**
- متد مجازی `codegen()`: تولید LLVM IR.
- **کلاس NumberExprAST:**
- سازنده با عدد.
- `codegen()`: تولید عدد به صورت LLVM IR.
- **کلاس VariableExprAST:**
- سازنده با شناسه.
- `codegen()`: تولید ارجاع به متغیر.
- **کلاس BinaryExprAST:**
- سازنده با عملگر، LHS و RHS.
- `codegen()`: تولید عملیات باینری.
- **کلاس CallExprAST:**
- سازنده با نام تابع و آرگومانها.
- `codegen()`: تولید فراخوانی تابع.
- **کلاس PrototypeAST و FunctionAST:**
- تعریف پروتوتایپ و تابع به همراه متد codegen.
### 19.3. API CodeGen
- **کلاس CodeGen:**
- `getGlobalContext()`, `Builder()`, `TheModule()`: مدیریت و دسترسی به Context و Module.
- `getNamedValue()`, `setNamedValue()`, `clearNamedValues()`: مدیریت جدول نمادها.
- همچنین توابع کمکی برای dump کردن ماژول و چاپ متغیرهای global.
### 19.4. API Concurrency
- **کلاس Concurrency:**
- `parallelFor(start, end, func)`: اجرای موازی روی بازهی داده شده.
### 19.5. API GPUAcceleration
- **کلاس GPUAcceleration:**
- `runSampleKernel()`: اجرای یک CUDA kernel جهت شتابدهی محاسبات.
- توابع کمکی مانند `simulateDataTransfer()`.
### 19.6. API Optimizer
- **کلاس Optimizer:**
- `runOptimizationPasses()`: اجرای مجموعهای از بهینهسازیهای LLVM بر روی Module.
### 19.7. API Parser
- **کلاس Parser:**
- توابع `parseExpression()`, `parsePrimary()`, `parseIdentifierExpr()`, `parseNumberExpr()`, `parseParenExpr()`, `parseBinOpRHS()`, `parsePrototype()`, `parseDefinition()`, `parseTopLevelExpr()`.
### 19.8. API Runtime
- **کلاس Runtime:**
- `initialize()`: راهاندازی محیط زمان اجرا و همچنین مفسر Python.
- `shutdown()`: پایاندهی به محیط زمان اجرا.
- `initializePython()`, `finalizePython()`, `executePythonCode()`: مدیریت مفسر Python جاسازیشده.
---
## بخش ۲۰: نمونههای پیشرفته و کاربردی
### 20.1. پروژههای نمونه پیشرفته
- **شبیهسازی جامع ماشین تورینگ:**
با استفاده از توابع Nexon مانند `computeForce`, `vectorMagnitude` و سایر توابع، کاربران میتوانند ماشین تورینگ خود را شبیهسازی کنند.
- **پیادهسازی الگوریتمهای رمزنگاری:**
استفاده از قابلیتهای ریاضی و پردازش موازی برای پیادهسازی الگوریتمهایی مانند RSA.
- **شبیهسازی سیستمهای فضایی:**
بهرهگیری از کتابخانههای پیشرفته ریاضی و فیزیک جهت مدلسازی حرکت اجرام آسمانی.
- **توسعه برنامههای علمی:**
استفاده از کتابخانههای Python (مانند NumPy و SciPy) برای تحلیل دادههای علمی و تجسم دادهها.
- **پروژههای کاربردی صنعتی:**
استفاده از Nexon برای ایجاد سیستمهای محاسباتی بزرگ با کارایی بالا در حوزههای مختلف.
### 20.2. نحوه استفاده از پروژههای نمونه
برای شروع، توسعهدهندگان میتوانند فایلهای نمونه مانند `test1.xon` را اجرا کنند:
```bash
nexon run tests/test1.xon
```
همچنین میتوانند پروژههای پیشرفته را از طریق دستورات:
```bash
nexon compile advanced_project.xon -o advanced_project.exe
```
و یا:
```bash
nexon generate-cpp advanced_project.xon -o advanced_project.cpp
```
اجرا و بررسی نمایند.
---
## بخش ۲۱: نکات پایانی و توصیههای توسعه
### 21.1. نکات اجرایی
- **سازگاری سیستم:**
اطمینان حاصل کنید که تمامی وابستگیهای سیستم (LLVM، CUDA، Python3 و ...) نصب شده باشند.
- **بهروزرسانی PATH:**
در سیستمهای ویندوز، در صورت نیاز از دستورات set یا setx برای افزودن مسیرهای لازم به PATH استفاده کنید.
- **مدیریت پروژه:**
از ابزارهای CI/CD برای تست و بهروزرسانی مداوم پروژه Nexon استفاده کنید.
- **مستندسازی:**
این فایل README.md مستندات جامع Nexon را ارائه میدهد؛ همچنین مستندات API به تفصیل در فایلهای هدر موجود است.
### 21.2. توصیههای توسعهدهندگان
- **گسترش زبان:**
Nexon به صورت ماژولار طراحی شده است؛ توسعهدهندگان میتوانند ماژولهای جدیدی مانند پشتیبانی از زبانهای سطح بالا، کنترلهای پیشرفته، و ابزارهای تحلیلی را به پروژه اضافه کنند.
- **استفاده از کتابخانههای استاندارد:**
توسعهدهندگان میتوانند به راحتی از تمامی کتابخانههای C++ و Python استفاده کنند. این امکان به وسیلهی ابزارهای تولید کد و مفسر Python جاسازیشده فراهم شده است.
- **بهبود عملکرد:**
با استفاده از بهینهسازیهای LLVM و پردازش موازی، پروژه Nexon توانسته است عملکرد بسیار بالایی ارائه دهد. توصیه میشود همواره از جدیدترین تکنیکهای بهینهسازی بهره ببرید.
- **ارتباط با جامعه:**
توسعهدهندگان Nexon میتوانند از GitHub برای به اشتراکگذاری کد، دریافت بازخورد و همکاری در توسعه زبان استفاده کنند.
---
## بخش ۲۲: نتیجهگیری
زبان برنامهنویسی Nexon، شاهکاری است که توسط **محمد طاها گرجی** طراحی و ساخته شده و هدف آن ارائه یک سیستم جامع، تولیدی و بسیار قدرتمند است.
این زبان با استفاده از فناوریهای پیشرفته مانند LLVM برای تولید کد، CUDA برای شتابدهی GPU، پردازش موازی برای استفاده بهینه از منابع CPU و ادغام کامل با کتابخانههای C++ و Python، تمامی نیازهای توسعهدهندگان برای ایجاد پروژههای پیچیده و پیشرفته را برآورده میکند.
ویژگیهای کلیدی Nexon شامل موارد زیر است:
- **پشتیبانی جامع از بهینهسازیهای سطح پایین**
- **استفاده واقعی و بهینه از CPU و GPU**
- **ادغام کامل با کتابخانههای استاندارد C++**
- **امکان استفاده از کتابخانههای Python از طریق مفسر جاسازیشده**
- **ابزارهای خط فرمان قدرتمند برای اجرای، کامپایل، تولید کد و دیباگ**
- **سیستم ماژولار و توسعهپذیر**
- **توسعه و بهبود مستمر از طریق جامعهی توسعهدهندگان**
این مستند به طور کامل تمام جنبههای زبان Nexon را پوشش میدهد تا حتی فردی که هیچ آشنایی با این زبان ندارد بتواند به راحتی از آن استفاده کند و پروژههای پیچیده را با آن پیادهسازی نماید.
### الگوریتم کارکرد Nexon در یک نگاه کلی:
1. **Lexer:** کد منبع به توکنهای معنایی دقیق تقسیم میشود.
2. **Parser:** توکنها به یک درخت نحوی انتزاعی (AST) تبدیل میشوند.
3. **Semantic Analysis:** AST مورد بررسی قرار گرفته و صحت معنایی آن تایید میشود.
4. **Code Generation:** با استفاده از IRBuilder و LLVM، AST به LLVM IR تبدیل و بهینه میشود.
5. **Optimization:** IR به وسیلهی passهای پیشرفته LLVM بهینهسازی میشود.
6. **Runtime:** محیط زمان اجرا، حافظه، پردازش موازی و GPU را مدیریت میکند و همچنین مفسر Python را برای استفاده از کتابخانههای Python فعال میسازد.
7. **Toolchain:** ابزارهایی برای بستهبندی، نصب، کامپایل و تولید کد C++ فراهم شدهاند.
8. **ادغام کتابخانهها:** امکان استفاده از کتابخانههای استاندارد C++ و Python در کدهای Nexon به سادگی فراهم شده است.
### نحوه استفاده از Nexon:
- پس از دانلود مخزن از GitHub ([https://github.com/mr-r0ot/Nexon](https://github.com/mr-r0ot/Nexon))، اسکریپت install.py تمامی وابستگیها را نصب و پیکربندی میکند.
- پروژه با استفاده از CMake ساخته میشود و فایل اجرایی Nexon در پوشهی مشخصی (مثلاً bin/) تولید میگردد.
- دستورات اصلی Nexon شامل run، package، install، compile، generate-cpp، debug و pyrun هستند.
- توسعهدهندگان میتوانند از تمامی کتابخانههای C++ و Python به صورت مستقیم در کدهای خود استفاده کنند.
- مستندات API و نحوه استفاده از هر بخش در فایلهای هدر موجود است.
### نحوه استفاده از کتابخانههای C++:
برای استفاده از کتابخانههای C++ در Nexon، کافی است در ابتدای فایلهای Nexon از دستور `#include` استفاده کنید. برای مثال:
```xon
#include
#include
#include
def main()
print("Hello from Nexon using C++ libraries!")
end
main()
```
این دستورات در فایل تولیدشده C++ به همان صورت باقی میمانند و امکان استفاده از کتابخانههای استاندارد C++ فراهم میشود.
### نحوه استفاده از کتابخانههای Python:
برای بهرهگیری از کتابخانههای Python در Nexon، از دستور pyrun استفاده کنید. به عنوان مثال:
```bash
nexon pyrun myscript.py
```
که در آن myscript.py شامل کدهایی مانند:
```python
import numpy as np
import pandas as pd
def analyze():
data = np.array([1, 2, 3, 4, 5])
df = pd.DataFrame(data, columns=["Values"])
print("DataFrame:")
print(df)
analyze()
```
میباشد. این کد توسط مفسر Python جاسازیشده در Runtime اجرا میشود.
---
## بخش ۲۳: راهنمای جامع استفاده برای مبتدیان
اگر شما هیچ اطلاعاتی در مورد Nexon ندارید، این بخش به شما کمک میکند تا از صفر شروع کنید.
### 23.1. نصب اولیه
1. **دانلود مخزن Nexon:**
به آدرس [https://github.com/mr-r0ot/Nexon](https://github.com/mr-r0ot/Nexon) مراجعه کرده و مخزن را دانلود کنید یا از طریق دستور `git clone` آن را کلون کنید.
2. **اجرای اسکریپت نصب:**
از طریق ترمینال دستور زیر را اجرا کنید:
```bash
python install.py
```
این اسکریپت تمامی وابستگیهای لازم مانند کامپایلر C++، LLVM، CUDA و Python3 را نصب و پیکربندی میکند.
### 23.2. ساخت پروژه
1. **پیکربندی با CMake:**
در پوشهی اصلی پروژه دستور زیر را اجرا کنید:
```bash
cmake -S . -B build
```
2. **ساخت پروژه:**
سپس دستور زیر را اجرا کنید:
```bash
cmake --build build
```
فایل اجرایی Nexon در پوشهی `build` یا `bin` تولید میشود.
### 23.3. اجرای برنامههای Nexon
1. **اجرای یک فایل منبع Nexon:**
برای اجرای یک فایل منبع به نام `test.xon` دستور زیر را اجرا کنید:
```bash
nexon run test.xon
```
2. **کامپایل به باینری native:**
برای کامپایل یک فایل Nexon به باینری native (مثلاً .exe) دستور زیر را اجرا کنید:
```bash
nexon compile source.xon -o output.exe
```
3. **تولید فایل C++ از Nexon:**
برای تولید فایل C++ از کد Nexon:
```bash
nexon generate-cpp source.xon -o output.cpp
```
4. **اجرای حالت دیباگ:**
برای اجرای حالت دیباگ:
```bash
nexon debug source.xon
```
5. **اجرای کد Python:**
برای اجرای فایل Python:
```bash
nexon pyrun script.py
```
### 23.4. نحوه استفاده از کتابخانههای C++ و Python
- **کتابخانههای C++:**
در هر فایل Nexon، میتوانید به سادگی از دستورات `#include` استفاده کنید:
```xon
#include
#include
def main()
print("Hello, Nexon!")
end
main()
```
این دستورات در فایل تولیدشده C++ 그대로 باقی میمانند و امکان استفاده از کتابخانههای C++ را فراهم میکنند.
- **کتابخانههای Python:**
با استفاده از دستور pyrun میتوانید فایلهای Python را اجرا کرده و از کتابخانههای Python بهره ببرید.
مثال:
```python
import numpy as np
print("Mean of array:", np.mean([1,2,3,4,5]))
```
سپس اجرای:
```bash
nexon pyrun stats.py
```
خروجی مربوطه نمایش داده میشود.
### 23.5. نکات و توصیههای پایانی برای مبتدیان
- **آشنایی با مفاهیم اصلی:**
ابتدا با خواندن مستندات و مثالهای ساده (مانند Hello World و مثالهای ریاضی) آشنا شوید.
- **توسعهی پروژههای کوچک:**
با پروژههای نمونه مانند محاسبهی میانگین آرایه، استفاده از کتابخانههای C++ و Python شروع کنید.
- **استفاده از حالت دیباگ:**
حالت دیباگ به شما کمک میکند �