یک زبان برنامهنویسی با نحو فارسی که به 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
# → سلام، جهان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 در مورد حرف اول بزرگ را برآورده کند.
نور 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):
- اسکفولد + واژگانیساز/تجزیهگر شکلگرفته بر مبنای Go
- اِمیتر «سلام جهان» در Go
- متغیرها (
متغیر+:=) + حساب دودویی - کنترل جریان (if/else، for، switch، break/continue، مقایسهها)
- نوعهای مرکب (struct، slice، map)
- چندبازگشتی، variadic، بستار، اعلان کوتاه چندنامی
- خطاها بهعنوان مقدار (
خطا،هیچ، if-with-init) - متدها + رابطها + نوعهای اشارهگر
- همروندی (
همرو،جریان،<-،بساز) - Defer + panic + recover
- رجیستری بستههای adapter-driven (توکار +
~/.noor/adapters/) - نوعسنج MVP (importها/متغیرهای استفادهنشده، arity فراخوانی/بازگشت)
- هارنس مثالها + مستندات
- جدا کردن مخزن (همین تاریخچهٔ commit)
cargo build --workspace
cargo test --workspace
cargo fmt --all --check
cargo clippy --workspace --all-targets -- -D warningsMIT. مراجعه به LICENSE.