Skip to main content

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.

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.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

senandika-0.1.0.tar.gz (18.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

senandika-0.1.0-py3-none-any.whl (15.0 kB view details)

Uploaded Python 3

File details

Details for the file senandika-0.1.0.tar.gz.

File metadata

  • Download URL: senandika-0.1.0.tar.gz
  • Upload date:
  • Size: 18.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.2

File hashes

Hashes for senandika-0.1.0.tar.gz
Algorithm Hash digest
SHA256 e81ccd33e41a8e079ef88d5689edc10745f6c22a83cd18499e29a69fd9e0bebd
MD5 3a9418db81ee35379746b9643474dca1
BLAKE2b-256 d2d171c6e54df6e7a1f75c5c9eba496b6ee01790498acd2a8ed4d1882bc1c1e0

See more details on using hashes here.

File details

Details for the file senandika-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: senandika-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 15.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.2

File hashes

Hashes for senandika-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 79303748b0f83fcc2f4419be7da0176645429d8e89778cc3c9ae301d4dd509cb
MD5 ab3c0a91b1aacb5be8d0d96061d80019
BLAKE2b-256 e5e40d3da604f59d025bc45ade221b6e42106b484f84899e5d69487c4ebf31d3

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page