# 🐍 נחשון - שפת תכנות עברית

<div dir="rtl">

## ברוכים הבאים לנחשון!

**נחשון** היא שפת תכנות מבוססת פייתון עם תחביר עברי מלא.
השפה נועדה להנגיש תכנות לדוברי עברית, במיוחד למתחילים ותלמידים.

נחשון מאפשרת לכתוב קוד בעברית טהורה, כולל מילות מפתח, שמות משתנים ופונקציות מובנות.

---

## ✨ תכונות

- 🔤 **תחביר עברי מלא** - כל מילות המפתח בעברית
- 🐍 **מבוסס פייתון** - תחביר מוכר ונוח
- 📚 **ספרייה סטנדרטית בעברית** - פונקציות מובנות בעברית
- ⚡ **קל לשימוש** - התקנה והרצה פשוטות
- 🛠️ **CLI מלא** - הרצה, בנייה ומצב אינטראקטיבי
- 📝 **הודעות שגיאה בעברית** - קל להבין מה השתבש

---

## 🚀 התחלה מהירה

### התקנה

```bash
# שכפול הפרויקט
git clone https://github.com/nachshon-lang/nachshon.git
cd nachshon

# התקנה עם pip (מומלץ)
pip install -e .
```

### הוספת nachshon ל-PATH

לאחר ההתקנה, הוסף את תיקיית הסקריפטים של פייתון ל-PATH שלך:

**macOS/Linux:**
```bash
# הוסף לקובץ ~/.zshrc או ~/.bashrc
export PATH="/Library/Frameworks/Python.framework/Versions/3.11/bin:$PATH"

# או אם משתמש ב-pip עם --user
export PATH="$HOME/.local/bin:$PATH"

# טען מחדש
source ~/.zshrc  # או source ~/.bashrc
```

**Windows:**
```powershell
# הוסף את תיקיית Scripts של Python ל-PATH
# בדרך כלל: C:\Users\USERNAME\AppData\Local\Programs\Python\Python311\Scripts
```

### הרצה ראשונה

```bash
# הדרך הכי פשוטה - פשוט תן את הקובץ!
nachshon examples/01_שלום_עולם.נח

# או עם python3 ישירות מתיקיית הפרויקט
python3 nachshon.py examples/01_שלום_עולם.נח

# או כמודול
python3 -m src examples/01_שלום_עולם.נח
```

---

## 📖 שימוש

### הרצת קובץ נחשון:
```bash
nachshon examples/01_שלום_עולם.נח
# או
nachshon run examples/01_שלום_עולם.נח
```

### בניית קובץ פייתון:
```bash
nachshon build examples/01_שלום_עולם.נח
```

### מצב אינטראקטיבי (REPL):
```bash
nachshon repl
# או פשוט
nachshon
```

### בדיקת תחביר:
```bash
nachshon check examples/01_שלום_עולם.נח
```

---

## 📖 מילות מפתח

### בקרת זרימה

| עברית | Python | תיאור |
|-------|--------|-------|
| `אם` | `if` | תנאי |
| `אחרת` | `else` | אחרת |
| `אחרת_אם` | `elif` | אחרת אם |
| `בעוד` | `while` | לולאת while |
| `עבור` | `for` | לולאת for |
| `בתוך` | `in` | בתוך (לולאה) |

### פונקציות

| עברית | Python | תיאור |
|-------|--------|-------|
| `הגדר` | `def` | הגדרת פונקציה |
| `החזר` | `return` | החזרת ערך |
| `הפסק` | `break` | הפסקת לולאה |
| `המשך` | `continue` | המשך לאיטרציה הבאה |
| `עבור_הלאה` | `pass` | לא לעשות כלום |

### ערכים מיוחדים

| עברית | Python | תיאור |
|-------|--------|-------|
| `אמת` | `True` | ערך אמת |
| `שקר` | `False` | ערך שקר |
| `ריק` | `None` | ערך ריק |

### אופרטורים לוגיים

| עברית | Python | תיאור |
|-------|--------|-------|
| `וגם` | `and` | וגם |
| `או` | `or` | או |
| `לא` | `not` | לא (שלילה) |

---

## 📚 פונקציות מובנות

| עברית | Python | תיאור |
|-------|--------|-------|
| `הדפס()` | `print()` | הדפסה למסך |
| `קלט()` | `input()` | קריאת קלט מהמשתמש |
| `אורך()` | `len()` | אורך רשימה/מחרוזת |
| `סוג()` | `type()` | סוג משתנה |
| `טווח()` | `range()` | יצירת טווח מספרים |
| `מספר_שלם()` | `int()` | המרה למספר שלם |
| `מספר_עשרוני()` | `float()` | המרה למספר עשרוני |
| `מחרוזת()` | `str()` | המרה למחרוזת |
| `רשימה()` | `list()` | יצירת רשימה |
| `מילון()` | `dict()` | יצירת מילון |
| `סכום()` | `sum()` | סכום רשימה |
| `מינימום()` | `min()` | ערך מינימלי |
| `מקסימום()` | `max()` | ערך מקסימלי |
| `ממוין()` | `sorted()` | מיון רשימה |

---

## 💡 דוגמאות קוד

### שלום עולם
```python
הדפס("שלום עולם!")
```

### משתנים
```python
שם = "דניאל"
גיל = 25
הדפס("שלום, " + שם)
הדפס("בן " + מחרוזת(גיל))
```

### תנאים
```python
גיל = 18

אם גיל >= 18:
    הדפס("מבוגר")
אחרת:
    הדפס("קטין")
```

### לולאות
```python
# לולאת עבור
עבור i בתוך טווח(5):
    הדפס(i)

# לולאת בעוד
מונה = 0
בעוד מונה < 5:
    הדפס(מונה)
    מונה = מונה + 1
```

### פונקציות
```python
הגדר ברכה(שם):
    הדפס("שלום, " + שם + "!")
    החזר אמת

ברכה("יוסי")

הגדר חיבור(א, ב):
    החזר א + ב

תוצאה = חיבור(3, 5)
הדפס(תוצאה)  # 8
```

### רשימות
```python
פירות = ["תפוח", "בננה", "תפוז"]

עבור פרי בתוך פירות:
    הדפס(פרי)

הדפס("יש " + מחרוזת(אורך(פירות)) + " פירות")
```

### מילונים
```python
אדם = {"שם": "יוסי", "גיל": 30}

הדפס(אדם["שם"])
הדפס(אדם["גיל"])

אדם["עיר"] = "תל אביב"
```

### פונקציה רקורסיבית
```python
הגדר עצרת(נ):
    אם נ <= 1:
        החזר 1
    החזר נ * עצרת(נ - 1)

הדפס(עצרת(5))  # 120
```

---

## 📁 מבנה הפרויקט

```
nachshon/
├── nachshon/
│   ├── __init__.py
│   ├── lexer.py      # מנתח לקסיקלי
│   ├── parser.py     # מנתח תחבירי
│   ├── transpiler.py # ממיר לפייתון
│   └── cli.py        # ממשק שורת פקודה
├── examples/         # דוגמאות קוד
│   ├── 01_שלום_עולם.נח
│   ├── 02_משתנים.נח
│   ├── 03_תנאים.נח
│   ├── 04_לולאות.נח
│   ├── 05_פונקציות.נח
│   ├── 06_רשימות.נח
│   ├── 07_מילונים.נח
│   ├── 08_מחרוזות.נח
│   ├── 09_משחק_ניחוש.נח
│   └── 10_מחשבון.נח
├── tests/           # בדיקות יחידה
│   ├── test_lexer.py
│   ├── test_parser.py
│   ├── test_transpiler.py
│   └── test_cli.py
└── README.md
```

---

## 🧪 הרצת בדיקות

```bash
# כל הבדיקות
python -m pytest tests/ -v

# בדיקות ספציפיות
python -m pytest tests/test_lexer.py -v
python -m pytest tests/test_parser.py -v
python -m pytest tests/test_transpiler.py -v
```

או:

```bash
python tests/test_lexer.py
python tests/test_parser.py
python tests/test_transpiler.py
python tests/test_cli.py
```

---

## 🔧 פקודות CLI

| פקודה | תיאור |
|-------|-------|
| `nachshon <file.נח>` | הרצת קובץ נחשון (ישירות) |
| `nachshon run <file>` | הרצת קובץ נחשון |
| `nachshon build <file>` | יצירת קובץ פייתון |
| `nachshon repl` | מצב אינטראקטיבי |
| `nachshon check <file>` | בדיקת תחביר |
| `nachshon tokens <file>` | הצגת טוקנים (דיבאג) |
| `nachshon ast <file>` | הצגת עץ תחביר (דיבאג) |

### אפשרויות נוספות

```bash
# הצגת קוד פייתון לפני הרצה
nachshon run --show-python examples/01_שלום_עולם.נח

# בנייה לקובץ ספציפי
nachshon build examples/01_שלום_עולם.נח -o output.py

# הצגת גרסה
nachshon --version
```

---

## 🤝 תרומה לפרויקט

מוזמנים לתרום! ניתן:
- לדווח על באגים
- להציע תכונות חדשות
- לשפר את התיעוד
- להוסיף דוגמאות קוד

---

## 📜 רישיון

MIT License

---

## 🙏 תודות

- לקהילת הפייתון הישראלית
- לכל התורמים והמשתמשים

---

**נחשון** - כי תכנות צריך להיות בשפה שלך! 🇮🇱

</div>
