@rafxzflow/multiscript
v1.0.0
Published
JavaScript nganggo basa Jawa, Sunda, lan Indonesia
Maintainers
Readme
MultiScript
JavaScript nganggo basa Jawa, Sunda, lan Indonesia.
MultiScript adalah transpiler kecil (penerus JawaScript) yang mengubah berkas .jawa, .sunda, dan .indo menjadi JavaScript melalui tiga tahap: tokenizer → parser → emitter, lalu mengeksekusinya dengan Node.js. Versi ini tidak lagi memakai regex pengganti kata sederhana — bahasa diparsing sungguhan sehingga string/komentar tak pernah salah diubah, dan kamus kata terpusat di satu berkas (src/keywords.js).
Install
npm install -g @rafxzflow/multiscriptUsage
Bahasa dideteksi otomatis dari ekstensi berkas: .jawa (Jawa), .sunda (Sunda), .indo (Indonesia).
jawa hello.jawa # jalankan berkas Jawa
sunda hello.sunda # jalankan berkas Sunda
indo hello.indo # jalankan berkas IndonesiaSatu bahasa sama di tiap ekstensi, contoh buat hello.sunda:
aya x = 10;
aya y = 20;
tampilkeun(x + y);
lamun (x < y) {
tampilkeun("x leutik");
} salian {
tampilkeun("x gede");
}Jalankan: sunda hello.sunda → 30 lalu x leutik.
Bila tidak tahu bahasanya, pakai multi yang auto-detect:
multi hello.jawa # otomatis jawa
multi hello.sunda # otomatis sunda
multi hello.indo # otomatis indoOverride bahasa dengan flag --lang=:
multi hello.sunda --lang=indoContoh
Tiga bahasa, satu bentuk program:
kelas Kethek {
konstruktor(jeneng) {
iki.jeneng = jeneng;
}
mangan(kg) {
tampilno(iki.jeneng + " mangan " + kg + " kg");
}
}
ono si = anyar Kethek("Kiki");
si.mangan(2);kelas Monyet {
konstruktor(jeneng) {
ieu.jeneng = jeneng;
}
dahar(kg) {
tampilkeun(ieu.jeneng + " dahar " + kg + " kg");
}
}
aya si = anyar Monyet("Kiki");
si.dahar(2);kelas Kethek {
konstruktor(nama) {
ini.nama = nama;
}
makan(kg) {
cetak(ini.nama + " makan " + kg + " kg");
}
}
biarkan si = baru Kethek("Kiki");
si.makan(2);Contoh lengkap ada di examples/ (folder jawa/, sunda/, indo/) — termasuk hello, test, oop, loop, async, error, dan kasir (sistem kasir sederhana).
Keyword
Semua kata terpusat di src/keywords.js — untuk ganti/tambah kata cukup edit berkas itu saja. Tabel lengkap ada di keywords.md.
Dasar
| JavaScript | Jawa | Sunda | Indonesia |
| ------------- | --------------- | ------------------ | ------------------ |
| let | ono | aya | biarkan |
| const | paten | tetep | konstanta |
| console.log | tampilno | tampilkeun | cetak |
| if | yen | lamun | jika |
| else if | ora yen | salian lamun | selain jika |
| else | ora | salian | selain |
| while | nganti | salila | selama |
| for | kanggo | keur | untuk |
| of | saka | tina | dari |
| in | ing | dina | dalam |
| function | fungsi | fungsi | fungsi |
| return | balekno | balikkeun | kembalikan |
| break | mandheg | eureun | hentikan |
| continue | lanjutna | lanjutkeun | lanjutkan |
| throw | buang | balingkeun | lempar |
| true | bener | bener | benar |
| false | salah | salah | salah |
Operator kata
Selain simbol JS (==, ===, =, !, &&, ||, <, >), operator juga bisa ditulis dalam kata:
| JavaScript | Jawa | Sunda | Indonesia |
| ---------- | -------------- | ----------------- | --------------- |
| && | lan | jeung | dan |
| \|\| | utawa | atawa | atau |
| === | padhaKaro | saruaPersis | samaPersis |
| !== | oraPadha | teuSarua | bukanSama |
| >= | gedhePadha | gedeSama | besarSama |
| <= | cilikPadha | leutikSama | kecilSama |
| > | gedhe | gede | besar |
| < | cilik | leutik | kecil |
Fungsi built-in
| JavaScript | Jawa | Sunda | Indonesia |
| ----------- | ----------------- | ----------------- | ----------------- |
| parseInt | teksDadiInteger | teksJadiInteger | teksJadiInteger |
| parseFloat| teksDadiDesimal | teksJadiDesimal | teksJadiDesimal |
Kelas & OOP
| JavaScript | Jawa | Sunda | Indonesia |
| ----------- | --------- | ----------- | --------- |
| class | kelas | kelas | kelas |
| extends | warisan | turunan | warisi |
| new | anyar | anyar | baru |
| this | iki | ieu | ini |
| constructor | konstruktor | konstruktor | konstruktor |
Async
| JavaScript | Jawa | Sunda | Indonesia |
| ---------- | --------- | --------- | ---------- |
| async | sambil | sabari | sembari |
| await | enteni | anti | tunggu |
Error handling
| JavaScript | Jawa | Sunda | Indonesia |
| ---------- | --------- | ----------- | ---------- |
| try | nyoba | coba | coba |
| catch | nompo | tangkep | tangkap |
| finally | akhire | ahirna | akhirnya |
| throw | buang | balingkeun| lempar |
Lainnya
| JavaScript | Jawa | Sunda | Indonesia |
| ---------- | ---------- | ----------- | --------------- |
| switch | milih | milih | pilih |
| case | kasus | kasus | kasus |
| default | asale | baku | asali |
| null | suwung | kosong | kosong |
| undefined| rajelas | teuJelas | tidakJelas |
Catatan: operator memakai simbol JS aslinya dan tidak diterjemahkan —
==,===,!==,!=,!,=,&&,||,<,>, dst. ditulis persis seperti JavaScript, tapi ada juga padanan katanya (lihat tabel di atas). Arrow=>juga dipakai apa adanya, misal(e) => cetak(e).Belum didukung:
typeof,instanceof, template literal, destructuring, getter/setter.
Member: console & DOM
Kamus member (MEMBERS di src/keywords.js) memetakan objek/method umum:
| JavaScript | Jawa | Sunda | Indonesia |
| ------------------- | -------------------- | -------------------------- | --------------------- |
| console | tampil | tampil | konsol |
| console.log | tampil.serat | tampil.serat | konsol.tulis |
| console.error | tampil.ngadat | tampil.ngadat | konsol.galat |
| console.warn | tampil.awas | tampil.awas | konsol.peringatan |
| console.info | tampil.kabar | tampil.info | konsol.info |
| console.table | tampil.tabel | tampil.tabel | konsol.tabel |
| document | dokumen | dokumen | dokumen |
| window | layar | jandela | jendela |
| Promise | janji | janji | janji |
| fetch | kirim | nyokot | ambil |
| querySelector | jupuk | teangan | cari |
| querySelectorAll | jupukKabeh | teanganKabeh | cariSemua |
| getElementById | jupukId | teanganId | cariId |
| createElement | gawe | jieun | buat |
| appendChild | tempel | tambihkeun | tempelkan |
| addEventListener | rungokno | reungeukeun | dengarkan |
| parseInt | teksDadiInteger | teksJadiInteger | teksJadiInteger |
| parseFloat | teksDadiDesimal | teksJadiDesimal | teksJadiDesimal |
Contoh: dokumen.jupuk("#tombol").rungokno("click", (e) => { ... }) → document.querySelector("#tombol").addEventListener("click", ...).
Contoh di examples/ yang memakai DOM (web.*) memerlukan browser; yang lain berjalan di Node.js.
Cara Kerja
- Tokenizer (
src/tokenizer.js) memecah berkas menjadi token (identifier, keyword, angka, string, operator), memakai kamus bahasa yang aktif. Kata yang mirip dicocokkan paling panjang dulu, misaltampilkeunvstampil, supaya tidak keliru. - Parser (
src/parser.js) membangun AST dengan recursive descent. Percabangan, perulangan, fungsi, class/OOP, async/await, error handling, switch, dan object/array benar-benar diparsing. - Emitter (
src/emitter.js) mengubah AST menjadi JavaScript, lalu dieksekusi.
Bahasa dipilih lewat src/translator.js → translate(code, lang); default jawa. CLI memilih bahasa dari ekstensi atau flag --lang=. Mengganti kata cukup di src/keywords.js; tokenizer/parser/emitter otomatis mengikuti tanpa perubahan lain.
MultiScript adalah project eksperimen yang dibuat untuk bersenang senang dan belajar bahasa daerah (Jawa & Sunda) dan bahasa Indonesia lewat pemrograman.
