Transpiler Bahasa Indonesia ke Python
Project description
Indpy ๐ฎ๐ฉ
Indpy adalah transpiler yang mengubah kode dengan sintaks Bahasa Indonesia menjadi kode Python valid, lalu langsung menjalankannya.
Kode .indpy โ Lexer โ Parser โ AST โ Transpiler โ Python
Instalasi
Termux / Acode Terminal / Linux
curl -fsSL https://raw.githubusercontent.com/ZanderoDev/Indpy/main/install.sh | bash
atau jika sudah di-clone:
bash install.sh
Setelah instalasi, buka terminal baru lalu jalankan:
indpy --versi
Persyaratan
- Python 3.7 atau lebih baru
- Git (untuk instalasi otomatis)
- pytest โ hanya untuk menjalankan unit test
pip install pytest
Struktur Folder
Indpy/
โโโ main.py # CLI entry point
โโโ lexer.py # Tokenizer โ teks โ token
โโโ parser.py # Parser โ token โ AST
โโโ transpiler.py # Generator โ AST โ kode Python
โโโ keywords.py # Peta kata kunci Bahasa Indonesia โ Python
โโโ errors.py # Kelas error berbahasa Indonesia
โโโ install.sh # Installer otomatis
โโโ tests/
โ โโโ test_lexer.py
โ โโโ test_parser.py
โ โโโ test_transpiler.py
โโโ contoh/
โโโ halo_dunia.indpy # Contoh 1: Halo Dunia
โโโ kalkulator.indpy # Contoh 2: Kalkulator
โโโ loop_dan_fungsi.indpy # Contoh 3: Loop & Fungsi
Cara Pakai
Setelah install global (indpy)
# Masuk REPL interaktif
indpy
# Jalankan file .indpy
indpy namafile.indpy
indpy jalankan namafile.indpy
# Lihat kode Python yang dihasilkan sebelum dijalankan
indpy jalankan namafile.indpy --tampilkan
# Ekspor ke file .py (tanpa menjalankan)
indpy ekspor namafile.indpy
indpy ekspor namafile.indpy -o output.py
# Cek versi
indpy --versi
Tanpa install (langsung dari folder)
python main.py jalankan contoh/halo_dunia.indpy
python main.py ekspor contoh/kalkulator.indpy -o hasil.py
python main.py repl
REPL Interaktif
Jalankan indpy tanpa argumen untuk masuk ke mode interaktif:
$ indpy
Indpy v1.0.0 (Python 3.11.6)
Ketik 'keluar()' atau tekan Ctrl+D untuk keluar.
>>> x = 10
>>> x * 3
30
>>> cetak("halo dari REPL")
halo dari REPL
Blok multi-baris
Blok yang dibuka dengan : otomatis masuk ke mode multi-baris. Tekan Enter kosong untuk mengeksekusi:
>>> fungsi kuadrat(n):
... kembali n ** 2
...
>>> kuadrat(7)
49
Pintasan keyboard
| Tombol | Aksi |
|---|---|
keluar() / exit() |
Keluar dari REPL |
| Ctrl+D | Keluar dari REPL |
| Ctrl+C | Batalkan input saat ini (tidak keluar) |
Kata Kunci yang Didukung
| Bahasa Indonesia | Python | Keterangan |
|---|---|---|
fungsi |
def |
Definisi fungsi |
kelas |
class |
Definisi kelas |
kembali |
return |
Nilai kembalian |
kembalikan |
return |
Alias kembali |
jika |
if |
Kondisi |
jika_tidak |
elif |
Kondisi lanjutan |
lainnya |
else |
Kondisi default |
untuk |
for |
Loop iterasi |
selama |
while |
Loop kondisi |
dalam |
in |
Operator keanggotaan |
hentikan |
break |
Keluar dari loop |
lanjut |
continue |
Lanjut iterasi |
lewati |
pass |
Pernyataan kosong |
lewat |
pass |
Alias lewati |
impor |
import |
Impor modul |
dari |
from |
Impor dari modul |
sebagai |
as |
Alias impor |
menjadi |
as |
Alias sebagai |
coba |
try |
Blok percobaan |
kecuali |
except |
Tangkap exception |
akhirnya |
finally |
Selalu dijalankan |
naikkan |
raise |
Lempar exception |
bersama |
with |
Context manager |
dan |
and |
Operator logika |
atau |
or |
Operator logika |
bukan |
not |
Negasi logika |
tidak |
not |
Alias bukan |
benar |
True |
Nilai boolean |
salah |
False |
Nilai boolean |
kosong |
None |
Nilai null |
global |
global |
Variabel global |
nonlokal |
nonlocal |
Variabel closure |
hapus |
del |
Hapus variabel |
lambda |
lambda |
Fungsi anonim |
pernyataan |
assert |
Pernyataan asersi |
cetak |
print |
Tampilkan output |
masukkan |
input |
Baca input |
panjang |
len |
Panjang koleksi |
rentang |
range |
Rentang angka |
tipe |
type |
Tipe data |
bilangan |
int |
Konversi ke bilangan |
desimal |
float |
Konversi ke desimal |
teks |
str |
Konversi ke teks |
daftar |
list |
Tipe list |
kamus |
dict |
Tipe dictionary |
himpunan |
set |
Tipe set |
Contoh Kode
Halo Dunia
cetak("Halo, Dunia!")
Fungsi dan kondisi
fungsi sapa(nama):
jika nama == "":
kembali "Halo, Anonim!"
kembali "Halo, " + nama + "!"
cetak(sapa("Budi"))
Loop
untuk i dalam rentang(1, 6):
cetak("Iterasi ke-" + teks(i))
Kelas
kelas Hewan:
fungsi __init__(diri, nama):
diri.nama = nama
fungsi suara(diri):
cetak(diri.nama, "bersuara!")
h = Hewan("Kucing")
h.suara()
Penanganan error
coba:
hasil = 10 / 0
kecuali ZeroDivisionError:
cetak("Tidak bisa membagi dengan nol!")
Impor modul
dari math impor sqrt sebagai akar_kuadrat
cetak(akar_kuadrat(16)) # โ 4.0
Keamanan String
Kata kunci di dalam tanda kutip tidak diterjemahkan:
cetak("jika hujan, bawa payung")
# โ print("jika hujan, bawa payung") โ bukan "if hujan, bawa payung"
Menjalankan Unit Test
pytest tests/ -v
Arsitektur
Lexer (lexer.py)
Membaca source code karakter per karakter.
Menghasilkan token: KATA_KUNCI, NAMA, ANGKA, TEKS, OP, DELIMITER,
INDENT, DEDENT, BARIS_BARU, EOF.
Longest-match-first: operator tiga karakter (mis. **=) dicek sebelum dua karakter.
String literal dijaga utuh โ isinya tidak diproses.
Parser (parser.py)
Recursive Descent Parser.
Mengonsumsi token dan membangun AST (pohon dict Python).
Mendukung: penugasan, if/elif/else, while, for, def, class,
try/except/finally, with, import, return, break, continue, pass,
lambda, assert, del, global, nonlocal, eksponen kanan-asosiatif, dsb.
Transpiler (transpiler.py)
Menelusuri AST secara rekursif.
Menghasilkan kode Python valid dengan indentasi otomatis.
main.py (CLI)
Subperintah: jalankan | ekspor | repl
indpy (tanpa argumen) โ langsung masuk REPL.
Mengorkestrasi Lexer โ Parser โ Transpiler โ exec().
Lisensi
MIT โ bebas digunakan dan dimodifikasi.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pyindo-1.0.0.tar.gz.
File metadata
- Download URL: pyindo-1.0.0.tar.gz
- Upload date:
- Size: 33.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bdf97dbb52ad5e3c1468c67f2601aab57619305a8ecaf21e7d1f7185e8428e19
|
|
| MD5 |
ec64981c7e0ffe16b771a3983ca808a8
|
|
| BLAKE2b-256 |
91925c983d69f7c6f6cf9fafea397362104f3a0db84eb513c69886f545e6e0c3
|
File details
Details for the file pyindo-1.0.0-py3-none-any.whl.
File metadata
- Download URL: pyindo-1.0.0-py3-none-any.whl
- Upload date:
- Size: 25.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7a941251b7397e81d6559e9edf79bc3a394214a99f58663d4c5c4bcfec662f4e
|
|
| MD5 |
77ce198b77ade18aa30c44663623032d
|
|
| BLAKE2b-256 |
7c35486b10d822fefa0106186947fc3c83b10940c0fee8b766cda9f060f047b3
|