Skip to content

Latest commit

 

History

History
185 lines (145 loc) · 7.46 KB

File metadata and controls

185 lines (145 loc) · 7.46 KB

نور (Noor)

یک زبان برنامه‌نویسی با نحو فارسی که به Go ترجمه می‌شود. فایل‌های منبع (.noor یا .نور) واژگانی‌سازی، تجزیه، نوع‌سنجی و سپس به یک واحد ترجمهٔ Go تبدیل می‌شوند و در نهایت به ابزار میزبان go برای ساخت نهایی سپرده می‌شوند.

نور از پروژهٔ Hormoz جدا شد، پس از آنکه طراحی آن حول backend مبتنی بر Go تثبیت شد. این دو پروژه الگوهای مشترکی دارند (واژگانی‌ساز آگاه از grapheme، تجزیه‌گر گردآورندهٔ تشخیص، کتابخانهٔ استاندارد adapter-driven) اما نور تلاش بلندمدت است.

ساختار مخزن

noor-core/   # واژگانی‌ساز، تجزیه‌گر، AST، نوع‌سنجی، go_gen، رجیستری adapter
noor-bin/    # درایور CLI با نام‌های `noor` / `نور`
examples/    # ۱۴ برنامهٔ نمونه + هارنس run_all.sh
adapters/    # نمونه فایل‌های TOML برای بسته‌های stdlib در Go

ساخت

cargo build --workspace --release

باینری‌ها در مسیر target/release/ ساخته می‌شوند:

  • noor و نور — درایور (تجزیه + تولید Go + فراخوانی go).

شروع سریع

بسته اصلی

کتابخانه («فرمت»)

کار نخست() {
    فرمت.چاپ(«سلام، جهان»)
}
./target/debug/noor run hello.noor
# → سلام، جهان

واسط خط فرمان (CLI)

noor parse  <file.noor>      چاپ AST تجزیه‌شده
noor emit   <file.noor>      چاپ سورس Go تولیدشده
noor build  <file.noor>      تولید `<file>.go` در کنار سورس
noor run    <file.noor>      تولید Go و سپس `go run` آن
noor adapter list            فهرست adapter‌های نصب‌شده
noor adapter add  <file>.toml نصب یک adapter
noor adapter remove <alias>  حذف adapter بر اساس alias

نمای کلی نحو

Source-level feature Noor keyword Go equivalent
package decl بسته package
import block کتابخانه («pkg») import "pkg"
public marker عمومی before decl uppercase first letter
function decl کار نام(...) func name(...)
method decl کار (recv T) Name(...) func (recv T) Name(...)
return بازگشت e1, e2 return e1, e2
value binding متغیر, := var, :=
primitives صحیح۳۲ etc. int32, …
string «...» interpreted "..."
nil / unit هیچ nil (Go has no void)
bools درست / غلط true / false
if/else اگر cond { } وگرنه cond { } وگرنه { } if/else if/else
if with init اگر init؛ cond { ... } if init; cond { ... }
for loops برای { }, برای cond { } for {}, for cond {}
switch انتخاب, مورد, پیشفرض switch, case, default
struct decl ساختار نام { ... } type Name struct {...}
slice / map []T, نقشه[K]V []T, map[K]V
interface رابط نام { ... } type Name interface {...}
pointer *T *T
address-of نشانی x &x
chan جریان T chan T
goroutine همرو f() go f()
send/recv ch <- v, <-ch identical
make بساز(T, ...) make(T, ...)
defer موکول f() defer f()
panic / recover وحشت(...), بازیابی() identical
variadic args ...T identical
closure کار(p T) R { ... } func(p T) R { ... }
iota equivalent شمارنده iota
error type خطا error

قواعد مهم

  • بدون نقطه‌ویرگول ASCII. خط‌جدید پایان‌دهندهٔ گزاره است. جداکنندهٔ داخلی در بندهای init مربوط به for/if نقطه‌ویرگول عربی ؛ (U+061B) است.
  • ارقام. ارقام ASCII (0-9)، فارسی (۰-۹) و عربی-هندی (٠-٩) همگی به‌عنوان رقم صحیح واژگانی می‌شوند و پیش از تجزیه به ASCII نرمال می‌شوند. ترکیب ارقام در یک توکن مجاز است.
  • شناسه‌ها پذیرای ZWNJ (U+200C) و خط‌تیره هستند (مثلاً می‌خواهم، چاپ-با-فرمت).
  • مرئیت (visibility) بر اساس کلیدواژه است نه حروف بزرگ، چون فارسی حروف بزرگ ندارد. عمومی پیش از کار/ساختار/رابط آن تعریف را export می‌کند. mangling شناسه یک X به ابتدای نام‌های export شده می‌افزاید تا نماد Go تولیدشده قاعدهٔ Go در مورد حرف اول بزرگ را برآورده کند.

بسته‌های adapter-driven

نور alias های فارسی بسته‌ها را از طریق یک رجیستری به import های Go نگاشت می‌کند. ورودی‌های توکار (فرمتfmt، سیستمos) درون باینری قرار دارند. کاربران می‌توانند با افزودن فایل TOML در ~/.noor/adapters/ adapter بیشتری اضافه کنند:

[package]
alias   = "ریاضی"
go_path = "math"

[[functions]]
alias   = "حداکثر"
go_name = "Max"

[[functions]]
alias   = "ریشه"
go_name = "Sqrt"

نصب با noor adapter add path/to/file.toml. نمونه adapter ها در پوشهٔ adapters/ این مخزن قرار دارند.

مثال‌ها

دستور bash examples/run_all.sh هر فایل .noor را به Go ترجمه می‌کند، با go build می‌سازد، اجرا می‌کند و خروجی مورد انتظار را تأیید می‌کند. برای جدول کامل به examples/README.md مراجعه کنید.

وضعیت فازها

پیاده‌سازی در ۱۴ فاز رشد کرده (قابل مشاهده در git log):

  1. اسکفولد + واژگانی‌ساز/تجزیه‌گر شکل‌گرفته بر مبنای Go
  2. اِمیتر «سلام جهان» در Go
  3. متغیرها (متغیر + :=) + حساب دودویی
  4. کنترل جریان (if/else، for، switch، break/continue، مقایسه‌ها)
  5. نوع‌های مرکب (struct، slice، map)
  6. چندبازگشتی، variadic، بستار، اعلان کوتاه چندنامی
  7. خطاها به‌عنوان مقدار (خطا، هیچ، if-with-init)
  8. متدها + رابط‌ها + نوع‌های اشاره‌گر
  9. هم‌روندی (همرو، جریان، <-، بساز)
  10. Defer + panic + recover
  11. رجیستری بسته‌های adapter-driven (توکار + ~/.noor/adapters/)
  12. نوع‌سنج MVP (importها/متغیرهای استفاده‌نشده، arity فراخوانی/بازگشت)
  13. هارنس مثال‌ها + مستندات
  14. جدا کردن مخزن (همین تاریخچهٔ commit)

توسعه

cargo build --workspace
cargo test  --workspace
cargo fmt   --all --check
cargo clippy --workspace --all-targets -- -D warnings

مجوز

MIT. مراجعه به LICENSE.