SenandCode — bahasa pemrograman puitis dalam Bahasa Indonesia. Setiap baris adalah puisi.
Project description
SenandCode ✨
Bahasa pemrograman puitis dalam Bahasa Indonesia
SenandCode — dari senandika (dialog batin yang puitis) + code — adalah bahasa pemrograman yang indah seperti puisi. Setiap baris adalah puisi. Setiap program adalah antologi.
Filosofi
Kode seharusnya indah. Bukan hanya berfungsi — ia harus berbicara. SenandCode lahir dari keyakinan bahwa menulis program adalah menulis puisi: setiap kata dipilih dengan hati-hati, setiap baris mengalir alami, dan setiap program menceritakan kisahnya sendiri.
"Simpan 5 dalam umur" — bukan sekadar assignment, ini adalah puisi mini.
Instalasi
Clone dan jalankan langsung dari source:
git clone https://github.com/zmy16/SenandCode.git
cd SenandCode
Pastikan Python 3.7+ sudah terinstal. Tidak perlu dependensi eksternal.
Cara Menjalankan
Jalankan file .sen:
python -m senandika examples/hello.sen
REPL mode interaktif:
python -m senandika
Di dalam REPL, semicolon (;) opsional. Tekan Ctrl+D atau Ctrl+Z untuk keluar.
Windows — double click run.bat:
run.bat # Masuk REPL
run.bat program.sen # Jalankan file
Sintaks
Dasar
| Konsep | SenandCode | Arti |
|---|---|---|
| Cetak | lukiskan "Halo"; |
Mencetak ke layar |
| Variabel | simpan 5 dalam x; |
Simpan nilai dalam variabel |
| Gabung teks | lukiskan "Halo " lalu nama; |
String concatenation |
| Input | dengarkan nama; |
Input dari pengguna |
| Komentar | // ini komentar |
Baris komentar |
Percabangan
seandainya x > 5:
lukiskan "Besar";
atau jika x == 5:
lukiskan "Pas";
jika tidak:
lukiskan "Kecil";
selesai
Perulangan
For loop:
untuk i = 1 sampai 5 lakukan:
lukiskan "Hitungan: " lalu i;
selesai
While loop:
simpan 5 dalam x;
selagi x > 0 lakukan:
lukiskan x;
simpan x - 1 dalam x;
selesai
Break & Continue:
untuk i = 1 sampai 10 lakukan:
seandainya i == 3:
hening; // berhenti di i = 3
selesai
seandainya i == 5:
sambung; // lewati i = 5
selesai
lukiskan i;
selesai
Fungsi
puisi luasLingkaran(r):
simpan 3.14 dalam pi;
kembalikan pi * r * r;
selesai
lukiskan luasLingkaran(7);
OOP (Kelas)
wajah Orang:
puisi lahir(nama, umur):
simpan nama dalam diri.nama;
simpan umur dalam diri.umur;
selesai
puisi perkenalan():
lukiskan "Aku " lalu diri.nama lalu ", " lalu diri.umur lalu " tahun.";
selesai
selesai
simpan ciptakan Orang("Asep", 25) dalam asep;
asep.perkenalan();
// Output: Aku Asep, 25 tahun.
Inheritance:
wajah Hewan:
puisi suara():
lukiskan "...";
selesai
selesai
wajah Kucing warisi Hewan:
puisi suara():
lukiskan "Meow!";
selesai
selesai
simpan ciptakan Kucing() dalam kucing;
kucing.suara();
// Output: Meow!
Array
simpan [1, 2, 3, 4, 5] dalam angka;
lukiskan panjang(angka); // Output: 5
lukiskan angka[0]; // Output: 1
simpan "Halo" dalam teks;
lukiskan panjang(teks); // Output: 4
lukiskan teks[0]; // Output: H
Penanganan Error
coba:
simpan 10 / 0 dalam x;
raih e:
lukiskan "Tercatat: " lalu e;
akhirnya:
lukiskan "Selesai.";
selesai
// Output:
// Tercatat: division by zero
// Selesai.
Boolean & Null
simpan benar dalam aktif;
simpan palsu dalam nonaktif;
simpan hampa dalam kosong;
seandainya aktif dan bukan nonaktif:
lukiskan "Sistem berjalan!";
selesai
Keyword Reference
Variabel & Output
| Keyword | Fungsi |
|---|---|
simpan |
Menyimpan nilai ke variabel |
dalam |
Bagian dari assignment (simpan <nilai> dalam <variabel>) |
lukiskan |
Mencetak output ke layar |
lalu |
Concatenation operator (gabung string/nilai) |
dengarkan |
Membaca input dari pengguna |
Percabangan
| Keyword | Fungsi |
|---|---|
seandainya |
If — kondisi pertama |
atau jika |
Else if — kondisi alternatif |
jika tidak |
Else — fallback |
Perulangan
| Keyword | Fungsi |
|---|---|
untuk |
For loop — iterasi range |
sampai |
Batas atas dalam for loop |
lakukan |
Memulai body blok |
selagi |
While loop — iterasi selama kondisi benar |
hening |
Break — hentikan loop |
sambung |
Continue — lewati iterasi saat ini |
Fungsi
| Keyword | Fungsi |
|---|---|
puisi |
Mendeklarasikan fungsi |
kembalikan |
Return value dari fungsi |
OOP
| Keyword | Fungsi |
|---|---|
wajah |
Deklarasi kelas |
diri |
Referensi ke instance saat ini (this/self) |
ciptakan |
Membuat objek baru (new/instance) |
warisi |
Inheritance — pewarisan kelas |
lahir |
Constructor — fungsi pembangkit objek |
Error Handling
| Keyword | Fungsi |
|---|---|
coba |
Try block |
raih |
Catch block — tangkap error |
akhirnya |
Finally block — selalu dijalankan |
lemparkan |
Throw exception |
Lainnya
| Keyword | Fungsi |
|---|---|
benar / palsu |
Boolean true / false |
hampa |
Null value |
dan / atau / bukan |
Logical and / or / not |
selesai |
Penutup blok |
panjang |
Built-in: panjang array atau string |
Struktur Proyek
SenandCode/
├── senandika/
│ ├── __init__.py # Package init
│ ├── __main__.py # CLI entry point + REPL
│ ├── lexer.py # Tokenizer (regex-based)
│ ├── parser.py # Recursive descent parser
│ └── interpreter.py # Tree-walk interpreter
├── examples/ # 9 contoh program .sen
│ ├── hello.sen # Hello world
│ ├── sapa.sen # Fungsi & parameter
│ ├── hitung.sen # Percabangan if/elif/else
│ ├── lingkaran.sen # Fungsi dengan return
│ ├── hitung_mundur.sen # For loop countdown
│ ├── biodata.sen # OOP & kelas
│ ├── error.sen # Try/catch/finally
│ ├── array.sen # Array & indexing
│ └── string_ops.sen # String operations
├── LICENSE # MIT License
├── README.md
├── pyproject.toml
├── run.bat
├── MANIFEST.in
└── .gitignore
Ekstensi File
Gunakan ekstresi .sen untuk file SenandCode.
Arsitektur
SenandCode mengikuti arsitektur interpreter klasik tiga tahap:
- Lexer — Mengubah source code menjadi token (kata kunci, variabel, operator)
- Parser — Menyusun token menjadi Abstract Syntax Tree (AST)
- Interpreter — Menjalankan AST secara langsung (tree-walk)
Tidak ada kompilasi ke bytecode. Tidak ada dependency eksternal. Murni Python.
Kredit
Penulis: Muhammad Raid Zakwan
Dibangun dengan cinta untuk bahasa Indonesia dan puisi.
Lisensi
MIT License — bebas digunakan, dimodifikasi, dan didistribusikan.
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 senandika-0.1.1.tar.gz.
File metadata
- Download URL: senandika-0.1.1.tar.gz
- Upload date:
- Size: 18.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
45ce8710d9f8adbb2fffaad6a18472ef7650fc0b7aad89b29dc87eaa31f941f0
|
|
| MD5 |
d4f4f061c732c53f4f7db977fa67e049
|
|
| BLAKE2b-256 |
df19456d0ee9b1afc60c9fab0f00d8599aa684b52625024de219602e29802e06
|
File details
Details for the file senandika-0.1.1-py3-none-any.whl.
File metadata
- Download URL: senandika-0.1.1-py3-none-any.whl
- Upload date:
- Size: 15.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
27d6af5dad29239ededea8b008d8c313481860912c61f1c99c9cc4568e24cba9
|
|
| MD5 |
11a3f26c5b9c3f27fe3dad304f2f85ad
|
|
| BLAKE2b-256 |
3d6a202ce2737c2873e9ddc6b62921e4a65ac87ae15ea7d496aede82e7fa651c
|