bahasa-simpl 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,127 @@
1
+
2
+
3
+ # `simpl`: Indonesian Mini Programming Language
4
+ `simpl` adalah bahasa pemrograman mini yang berbasis dari bahasa Indonesia. Bahasa ini dirancang untuk memudahkan penerjemahan berbagai konsep pemrograman ke dalam bahasa Indonesia. Selain itu, semua kata kunci (_keywords_) dari bahasa ini memiliki jumlah karakter persis 5 huruf untuk alasan estetika :)
5
+
6
+ `simpl` adalah akronim rekursif dari `simpl`: Indonesian Mini Programming Language
7
+
8
+ ## Fitur `simpl`
9
+ `simpl` **masih dalam tahap pengembangan!** Jadi, semua yang tertera disini akan berubah sewaktu-waktu!
10
+
11
+ Berikut fitur yang _sekarang_ sudah diimplementasikan:
12
+ - Bahasa pemrograman mini yang diinterpretasi JavaScript
13
+ - Pengecekan Tipe yang kuat (saat _runtime_)
14
+ - Mendukung fitur pemrograman fungsional (_first-class_, _closure_)
15
+ - Mendukung pembuatan Tipe melalui `model` (_struct_) dan `jenis` (_enum_)
16
+ - **Semua** kata kunci berjumlah 5 huruf dan dalam bahasa Indonesia
17
+
18
+ Fitur yang akan datang:
19
+ - Website untuk menjalankan `simpl`
20
+ - dokumentasi penuh
21
+ - Pembersihan dan perapihan kode sumber :')
22
+ - Pengecekan sebelum eksekusi (Analisa semantik)
23
+ - Pe`masuk`an input ke program
24
+ - Pengendalian `error`
25
+ - `impor` dan `expor`
26
+ - bytecode...
27
+ - dan fitur lainnya yang tidak terpikirkan sekarang :)
28
+
29
+ ## Contoh `simpl`
30
+ Tur lebih lengkap ada dalam [Tur Sintaks Simpl](docs/tur.md)
31
+ - `mesin` akar dua
32
+ ```simpl
33
+ mesin akar2 ==> (angka n) {
34
+ angka tetap TOLERANSI = 0.0000000000000000001
35
+ mesin abs ==> (angka a) {
36
+ kalau a < 0 { hasil -a }
37
+ hasil a
38
+ }
39
+ mesin rata2 ==> (angka a, angka b) { hasil (a+b)/2 }
40
+
41
+ # menebak dengan metode newton
42
+ angka tebakan = 0
43
+ angka selanjutnya = 1
44
+ slagi abs(tebakan - selanjutnya) > TOLERANSI {
45
+ rubah tebakan = selanjutnya
46
+ rubah selanjutnya = rata2(tebakan, n/tebakan)
47
+ }
48
+ hasil tebakan
49
+ }
50
+ ```
51
+ - demonstrasi fungsional
52
+ ```simpl
53
+ mesin map ==> (mesin f, baris masukan) {
54
+ baris keluaran = []
55
+ untuk datum d dalam masukan {
56
+ rubah keluaran = keluaran + [f(d)]
57
+ }
58
+ hasil keluaran
59
+ }
60
+
61
+ mesin ganda ==> (mesin f) {
62
+ hasil => (datum a) { hasil f(f(a)) }
63
+ }
64
+
65
+ baris contoh = [1,2,3,4,5]
66
+ mesin kuadrat ==> (angka n) { hasil n*n }
67
+
68
+ cetak ganda(kuadrat)(10)
69
+ # 10000
70
+
71
+ cetak map(ganda(kuadrat), contoh)
72
+ # [ 1, 16, 81, 256, 625 ]
73
+
74
+ ```
75
+ - demonstrasi pemodelan
76
+ ```simpl
77
+ model Pengguna (
78
+ petik nama,
79
+ angka id,
80
+ Status status
81
+ )
82
+
83
+ modul Pengguna {
84
+ jenis Status ( online, offline, rahasia )
85
+ angka jumlahPengguna = 0
86
+ mesin baru ==> (petik nama) {
87
+ Pengguna akunBaru = Pengguna(
88
+ nama,
89
+ jumlahPengguna,
90
+ Status.online
91
+ )
92
+ rubah jumlahPengguna = jumlahPengguna + 1
93
+ hasil akunBaru
94
+ }
95
+ mesin kePetik ==> (Pengguna p) {
96
+ petik status = ""
97
+ kalau p.status == Status.online {
98
+ rubah status = "online"
99
+ } namun kalau p.status == Status.offline {
100
+ rubah status = "offline"
101
+ } namun {
102
+ rubah status = "rahasia"
103
+ }
104
+ hasil
105
+ "{ nama: " + p.nama +
106
+ ", id: " + petik(p.id) +
107
+ ", status: " + status + " }"
108
+ }
109
+ }
110
+
111
+ Pengguna admin = Pengguna.baru("zie")
112
+ Pengguna lain = Pengguna.baru("Hengker Anongnimus")
113
+
114
+ cetak Pengguna.kepetik(admin)
115
+ # "{ nama: zie, id: 0, status: online }"
116
+
117
+ cetak Pengguna.kePetik(lain)
118
+ # "{ nama: Hengker Anongnimus, id: 1, status: online }"
119
+ ```
120
+
121
+
122
+ ## Sumber Referensi
123
+ `simpl` ada berkat tutorial yang sangat mengagumkan ini. _Check them out!_
124
+ - [https://ruslanspivak.com/lsbasi-part1/](https://ruslanspivak.com/lsbasi-part1/)
125
+ - [https://craftinginterpreters.com/](https://craftinginterpreters.com/)
126
+
127
+ (No AI was used while making this, the proof is apparent in the spaghetti codebase)