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 +127 -0
- package/dist/simpl-interpreter.js +2157 -0
- package/package.json +24 -0
- package/rollup.config.js +8 -0
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)
|