Skip to main content

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.

License Stars

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:

  1. Lexer — Mengubah source code menjadi token (kata kunci, variabel, operator)
  2. Parser — Menyusun token menjadi Abstract Syntax Tree (AST)
  3. 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.

Metadata

Release files for senandika 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for senandika 0.1.1
File Size Uploaded
senandika-0.1.1.tar.gz 18.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for senandika 0.1.1
File Interpreter ABI Platform
senandika-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 34.4 kB

Release files / senandika-0.1.1.tar.gz

Download URL senandika-0.1.1.tar.gz
Size 18.9 kB
Tags Source
SHA-256 checksum
How to use checksums
45ce8710d9f8adbb2fffaad6a18472ef7650fc0b7aad89b29dc87eaa31f941f0
BLAKE2b-256 checksum
How to use checksums
df19456d0ee9b1afc60c9fab0f00d8599aa684b52625024de219602e29802e06
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.2

Release files / senandika-0.1.1-py3-none-any.whl

Download URL senandika-0.1.1-py3-none-any.whl
Size 15.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
27d6af5dad29239ededea8b008d8c313481860912c61f1c99c9cc4568e24cba9
BLAKE2b-256 checksum
How to use checksums
3d6a202ce2737c2873e9ddc6b62921e4a65ac87ae15ea7d496aede82e7fa651c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.2

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page