pyscript-programming-language 1.2.0__tar.gz → 1.2.1__tar.gz
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.
Potentially problematic release.
This version of pyscript-programming-language might be problematic. Click here for more details.
- pyscript_programming_language-1.2.1/MANIFEST.in +5 -0
- {pyscript_programming_language-1.2.0 → pyscript_programming_language-1.2.1}/PKG-INFO +13 -13
- pyscript_programming_language-1.2.1/PyScript.png +0 -0
- {pyscript_programming_language-1.2.0 → pyscript_programming_language-1.2.1}/README.md +12 -12
- {pyscript_programming_language-1.2.0 → pyscript_programming_language-1.2.1}/pyscript/__main__.py +4 -3
- {pyscript_programming_language-1.2.0 → pyscript_programming_language-1.2.1}/pyscript/core/__init__.py +2 -0
- pyscript_programming_language-1.2.1/pyscript/core/handlers.py +60 -0
- {pyscript_programming_language-1.2.0 → pyscript_programming_language-1.2.1}/pyscript/core/highlight.py +21 -18
- {pyscript_programming_language-1.2.0 → pyscript_programming_language-1.2.1}/pyscript/core/interpreter.py +49 -48
- {pyscript_programming_language-1.2.0 → pyscript_programming_language-1.2.1}/pyscript/core/nodes.py +2 -2
- {pyscript_programming_language-1.2.0 → pyscript_programming_language-1.2.1}/pyscript/core/objects.py +2 -3
- {pyscript_programming_language-1.2.0 → pyscript_programming_language-1.2.1}/pyscript/core/parser.py +13 -6
- {pyscript_programming_language-1.2.0 → pyscript_programming_language-1.2.1}/pyscript/core/runner.py +2 -1
- {pyscript_programming_language-1.2.0 → pyscript_programming_language-1.2.1}/pyscript/core/utils.py +4 -64
- {pyscript_programming_language-1.2.0 → pyscript_programming_language-1.2.1}/pyscript/core/version.py +2 -2
- {pyscript_programming_language-1.2.0 → pyscript_programming_language-1.2.1}/pyscript/lib/_tantee/__init__.pys +12 -6
- {pyscript_programming_language-1.2.0 → pyscript_programming_language-1.2.1}/pyscript/lib/sys.pys +4 -1
- {pyscript_programming_language-1.2.0 → pyscript_programming_language-1.2.1}/pyscript_programming_language.egg-info/PKG-INFO +13 -13
- {pyscript_programming_language-1.2.0 → pyscript_programming_language-1.2.1}/pyscript_programming_language.egg-info/SOURCES.txt +3 -0
- {pyscript_programming_language-1.2.0 → pyscript_programming_language-1.2.1}/setup.py +1 -4
- {pyscript_programming_language-1.2.0 → pyscript_programming_language-1.2.1}/pyscript/__init__.py +0 -0
- {pyscript_programming_language-1.2.0 → pyscript_programming_language-1.2.1}/pyscript/__init__.pyi +0 -0
- {pyscript_programming_language-1.2.0 → pyscript_programming_language-1.2.1}/pyscript/core/bases.py +0 -0
- {pyscript_programming_language-1.2.0 → pyscript_programming_language-1.2.1}/pyscript/core/buffer.py +0 -0
- {pyscript_programming_language-1.2.0 → pyscript_programming_language-1.2.1}/pyscript/core/cache.py +0 -0
- {pyscript_programming_language-1.2.0 → pyscript_programming_language-1.2.1}/pyscript/core/constants.py +0 -0
- {pyscript_programming_language-1.2.0 → pyscript_programming_language-1.2.1}/pyscript/core/context.py +0 -0
- {pyscript_programming_language-1.2.0 → pyscript_programming_language-1.2.1}/pyscript/core/exceptions.py +0 -0
- {pyscript_programming_language-1.2.0 → pyscript_programming_language-1.2.1}/pyscript/core/lexer.py +0 -0
- {pyscript_programming_language-1.2.0 → pyscript_programming_language-1.2.1}/pyscript/core/position.py +0 -0
- {pyscript_programming_language-1.2.0 → pyscript_programming_language-1.2.1}/pyscript/core/pysbuiltins.py +0 -0
- {pyscript_programming_language-1.2.0 → pyscript_programming_language-1.2.1}/pyscript/core/results.py +0 -0
- {pyscript_programming_language-1.2.0 → pyscript_programming_language-1.2.1}/pyscript/core/singletons.py +0 -0
- {pyscript_programming_language-1.2.0 → pyscript_programming_language-1.2.1}/pyscript/core/symtab.py +0 -0
- {pyscript_programming_language-1.2.0 → pyscript_programming_language-1.2.1}/pyscript/core/token.py +0 -0
- {pyscript_programming_language-1.2.0 → pyscript_programming_language-1.2.1}/pyscript/core/validator.py +0 -0
- {pyscript_programming_language-1.2.0 → pyscript_programming_language-1.2.1}/pyscript/lib/_tantee/animate.pys +0 -0
- {pyscript_programming_language-1.2.0 → pyscript_programming_language-1.2.1}/pyscript/lib/_tantee/lyrics.pys +0 -0
- {pyscript_programming_language-1.2.0 → pyscript_programming_language-1.2.1}/pyscript/lib/_tantee/tantee.mp3 +0 -0
- {pyscript_programming_language-1.2.0 → pyscript_programming_language-1.2.1}/pyscript/lib/clock.pys +0 -0
- {pyscript_programming_language-1.2.0 → pyscript_programming_language-1.2.1}/pyscript/lib/getch.pys +0 -0
- {pyscript_programming_language-1.2.0 → pyscript_programming_language-1.2.1}/pyscript/lib/hello.pys +0 -0
- {pyscript_programming_language-1.2.0 → pyscript_programming_language-1.2.1}/pyscript/lib/parser.pys +0 -0
- {pyscript_programming_language-1.2.0 → pyscript_programming_language-1.2.1}/pyscript/lib/this.pys +0 -0
- {pyscript_programming_language-1.2.0 → pyscript_programming_language-1.2.1}/pyscript/this.py +0 -0
- {pyscript_programming_language-1.2.0 → pyscript_programming_language-1.2.1}/pyscript_programming_language.egg-info/dependency_links.txt +0 -0
- {pyscript_programming_language-1.2.0 → pyscript_programming_language-1.2.1}/pyscript_programming_language.egg-info/top_level.txt +0 -0
- {pyscript_programming_language-1.2.0 → pyscript_programming_language-1.2.1}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pyscript-programming-language
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.1
|
|
4
4
|
Summary: PyScript Programming Language
|
|
5
5
|
Home-page: https://github.com/azzammuhyala/pyscript
|
|
6
6
|
Author: azzammuhyala
|
|
@@ -39,8 +39,8 @@ PyScript adalah bahasa pemprograman sederhana yang dibuat di atas bahasa Python.
|
|
|
39
39
|
|
|
40
40
|
## Bagaimana Cara Pemasangannya?
|
|
41
41
|
1. Pertama-tama Anda perlu mengunduh Python terlebih dahulu. Usahakan versi yang digunakan sudah paling terbaru di atas versi `3.5` agar kode bisa di jalankan dengan benar. Kunjungi [website resmi Python](https://python.org) untuk mengunduhnya.
|
|
42
|
-
2. Setelah mengunduh dan melakukan beberapa konfigurasi aplikasi Python, unduh repositori ini atau melalui direktori `pyscript` atau dengan perintah `python -m pip install pyscript-programming-language` (_Direkomendasikan_).
|
|
43
|
-
3. Sekarang
|
|
42
|
+
2. Setelah mengunduh dan melakukan beberapa konfigurasi aplikasi Python, unduh repositori ini atau melalui direktori `pyscript` atau jika Anda sudah mengunduh Python gunakan dengan perintah `python -m pip install pyscript-programming-language` (_Direkomendasikan_).
|
|
43
|
+
3. Sekarang silahkan Anda jalankan PyScript shell (_REPL_) dengan perintah `python -m pyscript`. Jika berhasil maka harusnya Anda akan melihat versi, tanggal dan tanda `>>>`.
|
|
44
44
|
4. _OPSIONAL_. Anda bisa mengunduh dan menyiapkan kode editor seperti VS Code atau kode editor lainnya untuk menulis program. Atau kalau mau yang berbeda Anda bisa menggunakan Notepad.
|
|
45
45
|
5. Jika semua sudah aman dan berjalan dengan benar, sekarang Anda sudah bisa masuk ke sesi pengenalan bahasa PyScript!
|
|
46
46
|
|
|
@@ -73,8 +73,8 @@ Di sesi ini, Anda akan mempelajari semua aspek bahasa dalam bahasa PyScript yang
|
|
|
73
73
|
Pertama-tama Anda akan mempelajari tentang komentar, komentar adalah cara kita memberikan penjelasan tertentu pada blok kita agar jika suatu nanti atau orang lain bisa mengetahui maksud kode yang Anda tulis. Komentar di PyScript mirip dengan Python dimana ia dikuti dengan pagar `#` lalu setelah itu Anda bisa memberikan komentar. Komentar tidak diesekusi oleh program.
|
|
74
74
|
<pre class="pyscript-code"><span id="comment"># Ini adalah komentar</span><br><br><span id="comment"># Ini mencetak kata "Halo!" ke layar</span><br><span id="identifier-call">print</span><span id="parenthesis-0">(</span><span id="string">"Halo!"</span><span id="parenthesis-0">)</span><br><br><span id="number">1</span><span id="default"> + </span><span id="number">1</span><span id="default"> </span><span id="comment"># Ekspresi</span></pre>
|
|
75
75
|
|
|
76
|
-
### Variabel
|
|
77
|
-
Variabel secara singkat yakni menyimpan suatu nilai.
|
|
76
|
+
### Membuat Variabel (Operasi Penugasan)
|
|
77
|
+
Variabel secara singkat yakni menyimpan suatu nilai. Seharusnya Anda sudah tidak asing dengan variabel. Variabel di buat sebagai berikut ini:
|
|
78
78
|
<pre class="pyscript-code"><span id="identifier">x</span><span id="default"> = </span><span id="number">1</span><br><span id="identifier">y</span><span id="default"> = </span><span id="number">1</span><br><span id="identifier">z</span><span id="default"> = </span><span id="number">1</span></pre>
|
|
79
79
|
|
|
80
80
|
Di bahasa Python pun juga sama, kita membuat suatu nama lalu di lanjutkan tanda sama dengan lalu nilai yang mau kita isi.
|
|
@@ -86,7 +86,7 @@ Anda juga bisa sekaligus menyimpan lebih dari 1 variabel dengan hanya 1 nilai se
|
|
|
86
86
|
|
|
87
87
|
### Objek dan Tipe Data
|
|
88
88
|
Di PyScript sebenarnya objek dan tipe data di atur oleh Python. Jadi semua objek serta sifat-sifat dan fungsi-fungsinya semuanya di atur dari Python. Berikut ini beberapa objek literal dari Python/PyScript:
|
|
89
|
-
<pre class="pyscript-code"><span id="identifier">a</span><span id="default"> = </span><span id="number">1</span><span id="default"> </span><span id="comment"># int</span><br><span id="identifier">b</span><span id="default"> = </span><span id="number">1.0</span><span id="default"> </span><span id="comment"># float</span><br><span id="identifier">c</span><span id="default"> = </span><span id="number">1j</span><span id="default"> </span><span id="comment"># complex</span><br><span id="identifier">d</span><span id="default"> = </span><span id="number">1</span><span id="default">+</span><span id="number">1j</span><span id="default"> </span><span id="comment"># ini juga complex</span><br><span id="identifier">e</span><span id="default"> = </span><span id="string">'string'</span><span id="default"> </span><span id="comment">#
|
|
89
|
+
<pre class="pyscript-code"><span id="identifier">a</span><span id="default"> = </span><span id="number">1</span><span id="default"> </span><span id="comment"># int</span><br><span id="identifier">b</span><span id="default"> = </span><span id="number">1.0</span><span id="default"> </span><span id="comment"># float</span><br><span id="identifier">c</span><span id="default"> = </span><span id="number">1j</span><span id="default"> </span><span id="comment"># complex</span><br><span id="identifier">d</span><span id="default"> = </span><span id="number">1</span><span id="default">+</span><span id="number">1j</span><span id="default"> </span><span id="comment"># ini juga complex</span><br><span id="identifier">e</span><span id="default"> = </span><span id="string">'string'</span><span id="default"> </span><span id="comment"># str</span><br><span id="identifier">f</span><span id="default"> = </span><span id="string">"string"</span><span id="default"> </span><span id="comment"># ini juga str (beda kutipan saja)</span><br><span id="identifier">g</span><span id="default"> = </span><span id="string">r'raw'</span><span id="default"> </span><span id="comment"># raw str (string mentah tidak memproses escape)</span><br><span id="identifier">h</span><span id="default"> = </span><span id="string">b'bytes'</span><span id="default"> </span><span id="comment"># bytes</span><br><span id="identifier">i</span><span id="default"> = </span><span id="keyword-identifier">True</span><span id="default"> </span><span id="comment"># bool</span><br><span id="identifier">j</span><span id="default"> = </span><span id="keyword-identifier">False</span><span id="default"> </span><span id="comment"># ini juga bool (lawannya)</span><br><span id="identifier">k</span><span id="default"> = </span><span id="keyword-identifier">None</span><span id="default"> </span><span id="comment"># NoneType (tidak ada nilai)</span><br><span id="identifier">l</span><span id="default"> = </span><span id="parenthesis-0">[</span><span id="number">1</span><span id="default">, </span><span id="number">2</span><span id="parenthesis-0">]</span><span id="default"> </span><span id="comment"># list</span><br><span id="identifier">m</span><span id="default"> = </span><span id="parenthesis-0">(</span><span id="number">1</span><span id="default">, </span><span id="number">2</span><span id="parenthesis-0">)</span><span id="default"> </span><span id="comment"># tuple</span><br><span id="identifier">n</span><span id="default"> = </span><span id="parenthesis-0">{</span><span id="number">1</span><span id="default">, </span><span id="number">2</span><span id="parenthesis-0">}</span><span id="default"> </span><span id="comment"># set (himpunan)</span><br><span id="identifier">o</span><span id="default"> = </span><span id="parenthesis-0">{</span><span id="string">'a'</span><span id="default">: </span><span id="number">1</span><span id="parenthesis-0">}</span><span id="default"> </span><span id="comment"># dict (dictionary atau kamus)</span></pre>
|
|
90
90
|
|
|
91
91
|
Sebenarnya masih banyak pembahasan soal tipe data dan objek ini, Anda bisa mempelajarinya lebih dalam dari Python. Mungkin beberapa hal yang perlu Anda ketahui bahwa tidak semua literal Python bisa di tulis secara langsung di PyScript. Misalnya f-string atau formated string, untuk menulis literalnya di Python anda cukup beri prefix di string `f` seperti ini:
|
|
92
92
|
```py
|
|
@@ -162,7 +162,7 @@ Fungsi ini menggantikan sintaks Python yang ini:
|
|
|
162
162
|
```py
|
|
163
163
|
[wrap(i) for i in init if condition(i)]
|
|
164
164
|
```
|
|
165
|
-
Parameter `wrap` adalah berupa fungsi untuk menghasilkan nilai baru, parameter `condition` adalah berupa fungsi untuk memfilter nilai.
|
|
165
|
+
Parameter `wrap` adalah berupa fungsi untuk menghasilkan nilai baru, parameter `condition` adalah berupa fungsi untuk memfilter iterasi nilai.
|
|
166
166
|
|
|
167
167
|
- `isobjectof` (_`isobjectof(obj, class_or_tuple)`_) <br>
|
|
168
168
|
Fungsi ini mirip dengan fungsi _builtins_ Python `isinstance`, tetapi ini juga termasuk mengecek parameter `obj` adakah objek itu turunan dari `class_or_tuple` yang diberikan jika `obj` adalah berupa `type`.
|
|
@@ -203,12 +203,12 @@ Sisanya adalah operasi unik:
|
|
|
203
203
|
<pre class="pyscript-code"><span id="keyword-identifier">None</span><span id="default"> ?? </span><span id="number">0</span><span id="default"> </span><span id="comment"># operasi nullish (beda dengan or ia hanya peduli dengan nilai None)</span><br><span id="keyword-identifier">True</span><span id="default"> ? </span><span id="string">"Benar"</span><span id="default"> : </span><span id="string">"Salah"</span><span id="default"> </span><span id="comment"># operasi terner</span><br><br><span id="identifier">a</span><span id="default"> = </span><span id="number">0</span><br><br><span id="identifier">a</span><span id="default">++ </span><span id="comment"># operasi jumlahkan (menghasilkan nilai a sebelum di jumlahkan 1)</span><br><span id="default">++</span><span id="identifier">a</span><span id="default"> </span><span id="comment"># operasi jumlahkan (menghasilkan nilai a di tambahkan 1)</span><br><span id="identifier">a</span><span id="default">-- </span><span id="comment"># operasi kurangkan</span><br><span id="default">--</span><span id="identifier">a</span><span id="default"> </span><span id="comment"># operasi kurangkan</span></pre>
|
|
204
204
|
|
|
205
205
|
### Operasi Penugasan
|
|
206
|
-
Anda baru saja mempelajari cara menyimpan nilai ke sebuah variabel dan soal _unpacking variable_ itu semua adalah operasi penugasan. Operasi penugasan tidak berupa sama dengan `=`, tapi bisa operasi nilai seperti yang di sebutkan di atas berupa operasi-operasi, ini adalah cara sederhana memaksudkan arti `a = a <operasi> b` menjadi `a <operasi>= b`. Berikut ini contohnya:
|
|
207
|
-
<pre class="pyscript-code"><span id="identifier">a</span><span id="default"> = </span><span id="number">0</span><br><br><span id="identifier">a</span><span id="default"> += </span><span id="number">2</span><br><span id="identifier">a</span><span id="default"> -= </span><span id="number">1</span><br><span id="identifier">a</span><span id="default"> *= </span><span id="number">10</span><br><span id="identifier">a</span><span id="default"> /= </span><span id="number">2</span><br><span id="identifier">a</span><span id="default"> //= </span><span id="number">2</span><br><span id="identifier">a</span><span id="default"> %= </span><span id="number">3</span><br><span id="identifier">a</span><span id="default"> **= </span><span id="number">2</span><br><br><span id="identifier">b</span><span id="default"> =
|
|
206
|
+
Anda baru saja mempelajari cara menyimpan nilai ke sebuah variabel dan soal _unpacking variable_, itu semua adalah operasi penugasan. Operasi penugasan tidak berupa sama dengan `=`, tapi bisa operasi nilai seperti yang di sebutkan di atas berupa operasi-operasi, ini adalah cara sederhana memaksudkan arti `a = a <operasi> b` menjadi `a <operasi>= b`. Berikut ini contohnya:
|
|
207
|
+
<pre class="pyscript-code"><span id="identifier">a</span><span id="default"> = </span><span id="number">0</span><br><br><span id="identifier">a</span><span id="default"> += </span><span id="number">2</span><br><span id="identifier">a</span><span id="default"> -= </span><span id="number">1</span><br><span id="identifier">a</span><span id="default"> *= </span><span id="number">10</span><br><span id="identifier">a</span><span id="default"> /= </span><span id="number">2</span><br><span id="identifier">a</span><span id="default"> //= </span><span id="number">2</span><br><span id="identifier">a</span><span id="default"> %= </span><span id="number">3</span><br><span id="identifier">a</span><span id="default"> **= </span><span id="number">2</span><br><br><span id="identifier">b</span><span id="default"> = ...</span><br><span id="identifier">b</span><span id="default"> @= ...</span><br><br><span id="identifier">c</span><span id="default"> = </span><span id="number">8</span><br><span id="identifier">c</span><span id="default"> &= </span><span id="number">8</span><br><span id="identifier">c</span><span id="default"> |= </span><span id="number">16</span><br><span id="identifier">c</span><span id="default"> ^= </span><span id="number">2</span><br><span id="identifier">c</span><span id="default"> <<= </span><span id="number">2</span><br><span id="identifier">c</span><span id="default"> >>= </span><span id="number">2</span></pre>
|
|
208
208
|
|
|
209
209
|
### Blok kode
|
|
210
210
|
Blok kode dalam PyScript mengikuti bahasa seperti JavaScript, C, C++, dan sesamanya yang dimana menggunakan tanda kurung keriting `{}` untuk menyertakan bagian blok kode. Kadang, jika blok kode hanya berupa 1 statemen maka Anda bisa langsung menulis statemen itu tanpa perlu menggunakan tanda kurung.
|
|
211
|
-
<pre class="pyscript-code"><span id="keyword">if</span><span id="default"> </span><span id="parenthesis-0">(</span><span id="identifier">kondisi</span><span id="parenthesis-0">)</span><span id="default"> </span><span id="parenthesis-0">{</span><br><span id="default"> </span><span id="comment"># blok kode</span><br><span id="parenthesis-0">}</span><br><br><span id="keyword">if</span><span id="default"> </span><span id="parenthesis-0">(</span><span id="identifier">kondisi</span><span id="parenthesis-0">)</span><span id="default"> ... </span><span id="comment"># blok kode tunggal</span><br><br><span id="keyword">func</span><span id="default"> </span><span id="identifier-call">fufu</span><span id="parenthesis-0">(</span><span id="identifier">a</span><span id="parenthesis-0">)</span><span id="default"> </span><span id="parenthesis-0">{</span><br><span id="default"> </span><span id="keyword">if</span><span id="default"> </span><span id="parenthesis-1">(</span><span id="keyword-identifier">not</span><span id="default"> </span><span id="identifier">a</span><span id="parenthesis-1">)</span><span id="default"> </span><span id="keyword">return</span><span id="default">; </span><span id="comment"># statemen return seperti ini harus diberi</span><br><span id="default"> </span><span id="comment"># titik koma sebagai akhir statemen agar</span><br><span id="default"> </span><span id="comment"># tidak bocor ke statemen bawahnya</span><br><span id="default"> </span><span id="identifier">b</span><span id="default"> = </span><span id="identifier">a</span><br><span id="default"> </span><span id="keyword">return</span><span id="default"> </span><span id="identifier">a</span><br><span id="parenthesis-0">}</span><br><br><span id="comment"># kesalahan fatal (sulit diketahui karena apa)</span><br><span id="keyword">func</span><span id="default"> </span><span id="identifier-call">fafa</span><span id="parenthesis-0">(</span><span id="identifier">a</span><span id="parenthesis-0">)</span><span id="default"> </span><span id="parenthesis-0">{</span><br><span id="default"> </span><span id="keyword">if</span><span id="default"> </span><span id="parenthesis-1">(</span><span id="keyword-identifier">not</span><span id="default"> </span><span id="identifier">a</span><span id="parenthesis-1">)</span><span id="default"> </span><span id="keyword">return</span><span id="default"> </span><span id="comment"># tidak ada tanda koma</span><br><span id="default"> </span><span id="identifier">b</span><span id="default"> = </span><span id="identifier">a</span><span id="default"> </span><span id="comment"># parser mengiranya akan berupa return b</span><br><span id="default"> </span><span id="comment"># bukan return, hasilnya terjadi kesalahan di '='</span><br><span id="default"> </span><span id="keyword">return</span><span id="default"> </span><span id="identifier">a</span><br><span id="parenthesis-0">}</span><br><br><span id="identifier">loop</span><span id="default"> = </span><span id="number">100</span><br><span id="keyword">while</span><span id="default"> </span><span id="parenthesis-0">(</span><span id="identifier">loop</span><span id="default">--</span><span id="parenthesis-0">)</span><span id="default">; </span><span id="comment"># tanpa ada blok kode sama sekali (tidak berlaku</span><br><span id="default"> </span><span id="comment"># untuk semuanya kadang suatu statemen perlu blok kode)</span><br><span id="default"> </span><span id="comment"># sekali lagi jangan lupakan titik koma!</span></pre>
|
|
211
|
+
<pre class="pyscript-code"><span id="keyword">if</span><span id="default"> </span><span id="parenthesis-0">(</span><span id="identifier">kondisi</span><span id="parenthesis-0">)</span><span id="default"> </span><span id="parenthesis-0">{</span><br><span id="default"> </span><span id="comment"># blok kode</span><br><span id="parenthesis-0">}</span><br><br><span id="keyword">if</span><span id="default"> </span><span id="parenthesis-0">(</span><span id="identifier">kondisi</span><span id="parenthesis-0">)</span><span id="default"> ... </span><span id="comment"># blok kode tunggal</span><br><br><span id="keyword">func</span><span id="default"> </span><span id="identifier-call">fufu</span><span id="parenthesis-0">(</span><span id="identifier">a</span><span id="parenthesis-0">)</span><span id="default"> </span><span id="parenthesis-0">{</span><br><span id="default"> </span><span id="keyword">if</span><span id="default"> </span><span id="parenthesis-1">(</span><span id="keyword-identifier">not</span><span id="default"> </span><span id="identifier">a</span><span id="parenthesis-1">)</span><span id="default"> </span><span id="keyword">return</span><span id="default">; </span><span id="comment"># statemen return seperti ini harus diberi</span><br><span id="default"> </span><span id="comment"># titik koma sebagai akhir statemen agar</span><br><span id="default"> </span><span id="comment"># tidak bocor ke statemen bawahnya</span><br><span id="default"> </span><span id="identifier">b</span><span id="default"> = </span><span id="identifier">a</span><br><span id="default"> </span><span id="keyword">return</span><span id="default"> </span><span id="identifier">a</span><br><span id="parenthesis-0">}</span><br><br><span id="comment"># kesalahan fatal (sulit diketahui karena apa)</span><br><span id="keyword">func</span><span id="default"> </span><span id="identifier-call">fafa</span><span id="parenthesis-0">(</span><span id="identifier">a</span><span id="parenthesis-0">)</span><span id="default"> </span><span id="parenthesis-0">{</span><br><span id="default"> </span><span id="keyword">if</span><span id="default"> </span><span id="parenthesis-1">(</span><span id="keyword-identifier">not</span><span id="default"> </span><span id="identifier">a</span><span id="parenthesis-1">)</span><span id="default"> </span><span id="keyword">return</span><span id="default"> </span><span id="comment"># tidak ada tanda koma</span><br><span id="default"> </span><span id="identifier">b</span><span id="default"> = </span><span id="identifier">a</span><span id="default"> </span><span id="comment"># parser mengiranya akan berupa return b = a</span><br><span id="default"> </span><span id="comment"># bukan return, hasilnya terjadi kesalahan di '='</span><br><span id="default"> </span><span id="keyword">return</span><span id="default"> </span><span id="identifier">a</span><br><span id="parenthesis-0">}</span><br><br><span id="identifier">loop</span><span id="default"> = </span><span id="number">100</span><br><span id="keyword">while</span><span id="default"> </span><span id="parenthesis-0">(</span><span id="identifier">loop</span><span id="default">--</span><span id="parenthesis-0">)</span><span id="default">; </span><span id="comment"># tanpa ada blok kode sama sekali (tidak berlaku</span><br><span id="default"> </span><span id="comment"># untuk semuanya kadang suatu statemen perlu blok kode)</span><br><span id="default"> </span><span id="comment"># sekali lagi jangan lupakan titik koma!</span></pre>
|
|
212
212
|
|
|
213
213
|
### Statemen _if-elif-else_
|
|
214
214
|
Statemen ini berfungsi untuk mengecek suatu nilai kondisi dimana jika kondisi itu benar, maka blok kodenya akan dieksekusi. _elif_ atau singkatan dari _else if_ adalah lanjutan blok kondisi jika kondisi di atasnya tidak terpenuhi sampai jika semuanya tidak terpenuhi maka akan menuju blok _else_.
|
|
@@ -216,15 +216,15 @@ Statemen ini berfungsi untuk mengecek suatu nilai kondisi dimana jika kondisi it
|
|
|
216
216
|
|
|
217
217
|
### Statemen _for_
|
|
218
218
|
Statemen ini adalah statemen perulangan dimana biasanya perulangannya sudah di ketahui berapa kali.
|
|
219
|
-
<pre class="pyscript-code"><span id="comment"># perulangan 0 sampai 4 (totalnya 5 perulangan)</span><br><span id="keyword">for</span><span id="default"> </span><span id="parenthesis-0">(</span><span id="identifier">i</span><span id="default"> = </span><span id="number">0</span><span id="default">; </span><span id="identifier">i</span><span id="default"> < </span><span id="number">5</span><span id="default">; </span><span id="identifier">i</span><span id="default">++</span><span id="parenthesis-0">)</span><span id="default"> </span><span id="parenthesis-0">{</span><br><span id="default"> </span><span id="identifier-call">print</span><span id="parenthesis-1">(</span><span id="string">"i ke"</span><span id="default">, </span><span id="identifier">i</span><span id="parenthesis-1">)</span><br><span id="parenthesis-0">}</span><br><br><span id="comment"># strukturnya:</span><br><span id="comment"># for (<initilisasi>; <kondisi>; <pembaruan>) <blok perulangannnya></span><br><br><span id="comment"># for-each (perulangan tiap elemen)</span><br><span id="identifier">element</span><span id="default"> = </span><span id="parenthesis-0">[</span><span id="number">1</span><span id="default">, </span><span id="number">2</span><span id="default">, </span><span id="number">3</span><span id="default">, </span><span id="number">4</span><span id="default">, </span><span id="number">5</span><span id="parenthesis-0">]</span><br><span id="keyword">for</span><span id="default"> </span><span id="parenthesis-0">(</span><span id="identifier">i</span><span id="default"> </span><span id="keyword-identifier">of</span><span id="default"> </span><span id="identifier">element</span><span id="parenthesis-0">)</span><span id="default"> </span><span id="parenthesis-0">{</span><br><span id="default"> </span><span id="identifier-call">print</span><span id="parenthesis-1">(</span><span id="string">"i ke"</span><span id="default">, </span><span id="identifier">i</span><span id="parenthesis-1">)</span><br><span id="parenthesis-0">}</span></pre>
|
|
219
|
+
<pre class="pyscript-code"><span id="comment"># perulangan 0 sampai 4 (totalnya 5 perulangan)</span><br><span id="keyword">for</span><span id="default"> </span><span id="parenthesis-0">(</span><span id="identifier">i</span><span id="default"> = </span><span id="number">0</span><span id="default">; </span><span id="identifier">i</span><span id="default"> < </span><span id="number">5</span><span id="default">; </span><span id="identifier">i</span><span id="default">++</span><span id="parenthesis-0">)</span><span id="default"> </span><span id="parenthesis-0">{</span><br><span id="default"> </span><span id="identifier-call">print</span><span id="parenthesis-1">(</span><span id="string">"i ke"</span><span id="default">, </span><span id="identifier">i</span><span id="parenthesis-1">)</span><br><span id="parenthesis-0">}</span><br><br><span id="comment"># strukturnya:</span><br><span id="comment"># for (<initilisasi>; <kondisi>; <pembaruan>) <blok perulangannnya></span><br><br><span id="comment"># for-each (perulangan tiap elemen)</span><br><span id="identifier">element</span><span id="default"> = </span><span id="parenthesis-0">[</span><span id="number">1</span><span id="default">, </span><span id="number">2</span><span id="default">, </span><span id="number">3</span><span id="default">, </span><span id="number">4</span><span id="default">, </span><span id="number">5</span><span id="parenthesis-0">]</span><br><span id="keyword">for</span><span id="default"> </span><span id="parenthesis-0">(</span><span id="identifier">i</span><span id="default"> </span><span id="keyword-identifier">of</span><span id="default"> </span><span id="identifier">element</span><span id="parenthesis-0">)</span><span id="default"> </span><span id="parenthesis-0">{</span><br><span id="default"> </span><span id="identifier-call">print</span><span id="parenthesis-1">(</span><span id="string">"i ke"</span><span id="default">, </span><span id="identifier">i</span><span id="parenthesis-1">)</span><br><span id="parenthesis-0">}</span><br><br><span id="comment"># dengan blok else (diesekusi jika loop berhenti tanpa break)</span><br><span id="keyword">for</span><span id="default"> </span><span id="parenthesis-0">(</span><span id="identifier">i</span><span id="default"> </span><span id="keyword-identifier">of</span><span id="default"> </span><span id="identifier-class">range</span><span id="parenthesis-1">(</span><span id="number">5</span><span id="parenthesis-1">)</span><span id="parenthesis-0">)</span><span id="default"> </span><span id="parenthesis-0">{</span><br><span id="default"> </span><span id="identifier-call">print</span><span id="parenthesis-1">(</span><span id="identifier">i</span><span id="parenthesis-1">)</span><br><span id="parenthesis-0">}</span><span id="default"> </span><span id="keyword">else</span><span id="default"> </span><span id="parenthesis-0">{</span><br><span id="default"> </span><span id="identifier-call">print</span><span id="parenthesis-1">(</span><span id="string">"Selesai tanpa break"</span><span id="parenthesis-1">)</span><br><span id="parenthesis-0">}</span></pre>
|
|
220
220
|
|
|
221
221
|
### Statemen _while_
|
|
222
222
|
Statemen ini juga perulangan mirip dengan statemen _for_, tapi bedanya ini perulangannya belum diketahui sampai akhirnya kondisinya salah atau tidak memenuhi.
|
|
223
|
-
<pre class="pyscript-code"><span id="identifier">selesai</span><span id="default"> = </span><span id="keyword-identifier">False</span><br><span id="keyword">while</span><span id="default"> </span><span id="parenthesis-0">(</span><span id="keyword-identifier">not</span><span id="default"> </span><span id="identifier">selesai</span><span id="parenthesis-0">)</span><span id="default"> </span><span id="parenthesis-0">{</span><br><span id="default"> </span><span id="identifier">masukan</span><span id="default"> = </span><span id="identifier-call">input</span><span id="parenthesis-1">(</span><span id="string">"Ketik sesuatu (keluar untuk keluar): "</span><span id="parenthesis-1">)</span><br><span id="default"> </span><span id="keyword">if</span><span id="default"> </span><span id="parenthesis-1">(</span><span id="identifier">masukan</span><span id="default">.</span><span id="identifier-call">strip</span><span id="parenthesis-2">()</span><span id="default">.</span><span id="identifier-call">lower</span><span id="parenthesis-2">()</span><span id="default"> == </span><span id="string">'keluar'</span><span id="parenthesis-1">)</span><span id="default"> </span><span id="parenthesis-1">{</span><br><span id="default"> </span><span id="identifier">selesai</span><span id="default"> = </span><span id="keyword-identifier">True</span><br><span id="default"> </span><span id="parenthesis-1">}</span><br><span id="default"> </span><span id="identifier-call">print</span><span id="parenthesis-
|
|
223
|
+
<pre class="pyscript-code"><span id="identifier">selesai</span><span id="default"> = </span><span id="keyword-identifier">False</span><br><br><span id="keyword">while</span><span id="default"> </span><span id="parenthesis-0">(</span><span id="keyword-identifier">not</span><span id="default"> </span><span id="identifier">selesai</span><span id="parenthesis-0">)</span><span id="default"> </span><span id="parenthesis-0">{</span><br><span id="default"> </span><span id="identifier">masukan</span><span id="default"> = </span><span id="identifier-call">input</span><span id="parenthesis-1">(</span><span id="string">"Ketik sesuatu (keluar untuk keluar): "</span><span id="parenthesis-1">)</span><br><br><span id="default"> </span><span id="keyword">if</span><span id="default"> </span><span id="parenthesis-1">(</span><span id="identifier">masukan</span><span id="default">.</span><span id="identifier-call">strip</span><span id="parenthesis-2">()</span><span id="default">.</span><span id="identifier-call">lower</span><span id="parenthesis-2">()</span><span id="default"> == </span><span id="string">'keluar'</span><span id="parenthesis-1">)</span><span id="default"> </span><span id="parenthesis-1">{</span><br><span id="default"> </span><span id="identifier">selesai</span><span id="default"> = </span><span id="keyword-identifier">True</span><br><span id="default"> </span><span id="parenthesis-1">}</span><br><span id="default"> </span><span id="keyword">else</span><span id="default"> </span><span id="parenthesis-1">{</span><br><span id="default"> </span><span id="identifier-call">print</span><span id="parenthesis-2">(</span><span id="string">"Anda memasukan:"</span><span id="default">, </span><span id="identifier">masukan</span><span id="parenthesis-2">)</span><br><span id="default"> </span><span id="parenthesis-1">}</span><br><span id="parenthesis-0">}</span><br><br><span id="identifier">i</span><span id="default"> = </span><span id="number">5</span><br><br><span id="comment"># dengan blok else</span><br><span id="keyword">while</span><span id="default"> </span><span id="parenthesis-0">(</span><span id="identifier">i</span><span id="parenthesis-0">){</span><br><span id="default"> </span><span id="identifier-call">print</span><span id="parenthesis-1">(</span><span id="identifier">i</span><span id="default">--</span><span id="parenthesis-1">)</span><br><span id="parenthesis-0">}</span><span id="default"> </span><span id="keyword">else</span><span id="default"> </span><span id="parenthesis-0">{</span><br><span id="default"> </span><span id="identifier-call">print</span><span id="parenthesis-1">(</span><span id="string">"Selesai tanpa break"</span><span id="parenthesis-1">)</span><br><span id="parenthesis-0">}</span></pre>
|
|
224
224
|
|
|
225
225
|
### Statemen _do-while_
|
|
226
226
|
Statemen perulangan ini mirip dengan statemen _while_, bedanya adalah blok kode setidaknya dijalankan sekali meski kondisinya salah atau tidak memenuhi sejak awal.
|
|
227
|
-
<pre class="pyscript-code"><span id="identifier">selanjutnya</span><span id="default"> = </span><span id="keyword-identifier">False</span><br><span id="keyword">do</span><span id="default"> </span><span id="parenthesis-0">{</span><br><span id="default"> </span><span id="identifier-call">print</span><span id="parenthesis-1">(</span><span id="string">"Selanjutnya"</span><span id="parenthesis-1">)</span><br><span id="parenthesis-0">}</span><span id="default"> </span><span id="keyword">while</span><span id="default"> </span><span id="parenthesis-0">(</span><span id="identifier">selanjutnya</span><span id="parenthesis-0">)</span></pre>
|
|
227
|
+
<pre class="pyscript-code"><span id="identifier">selanjutnya</span><span id="default"> = </span><span id="keyword-identifier">False</span><br><span id="keyword">do</span><span id="default"> </span><span id="parenthesis-0">{</span><br><span id="default"> </span><span id="identifier-call">print</span><span id="parenthesis-1">(</span><span id="string">"Selanjutnya"</span><span id="parenthesis-1">)</span><br><span id="parenthesis-0">}</span><span id="default"> </span><span id="keyword">while</span><span id="default"> </span><span id="parenthesis-0">(</span><span id="identifier">selanjutnya</span><span id="parenthesis-0">)</span><br><br><span id="identifier">i</span><span id="default"> = </span><span id="number">0</span><br><br><span id="comment"># dengan blok else</span><br><span id="keyword">do</span><span id="default"> </span><span id="parenthesis-0">{</span><br><span id="default"> </span><span id="identifier">i</span><span id="default">++</span><br><span id="parenthesis-0">}</span><span id="default"> </span><span id="keyword">while</span><span id="default"> </span><span id="parenthesis-0">(</span><span id="identifier">i</span><span id="default"> < </span><span id="number">5</span><span id="parenthesis-0">)</span><span id="default"> </span><span id="keyword">else</span><span id="default"> </span><span id="parenthesis-0">{</span><br><span id="default"> </span><span id="identifier-call">print</span><span id="parenthesis-1">(</span><span id="string">"Selesai tanpa break"</span><span id="parenthesis-1">)</span><br><span id="parenthesis-0">}</span></pre>
|
|
228
228
|
|
|
229
229
|
### Statemen _switch-case-default_
|
|
230
230
|
Statemen ini adalah bentuk kontrol untuk memilih suatu aksi dari target nilai yang diberikan untuk dijalankan.
|
|
Binary file
|
|
@@ -8,8 +8,8 @@ PyScript adalah bahasa pemprograman sederhana yang dibuat di atas bahasa Python.
|
|
|
8
8
|
|
|
9
9
|
## Bagaimana Cara Pemasangannya?
|
|
10
10
|
1. Pertama-tama Anda perlu mengunduh Python terlebih dahulu. Usahakan versi yang digunakan sudah paling terbaru di atas versi `3.5` agar kode bisa di jalankan dengan benar. Kunjungi [website resmi Python](https://python.org) untuk mengunduhnya.
|
|
11
|
-
2. Setelah mengunduh dan melakukan beberapa konfigurasi aplikasi Python, unduh repositori ini atau melalui direktori `pyscript` atau dengan perintah `python -m pip install pyscript-programming-language` (_Direkomendasikan_).
|
|
12
|
-
3. Sekarang
|
|
11
|
+
2. Setelah mengunduh dan melakukan beberapa konfigurasi aplikasi Python, unduh repositori ini atau melalui direktori `pyscript` atau jika Anda sudah mengunduh Python gunakan dengan perintah `python -m pip install pyscript-programming-language` (_Direkomendasikan_).
|
|
12
|
+
3. Sekarang silahkan Anda jalankan PyScript shell (_REPL_) dengan perintah `python -m pyscript`. Jika berhasil maka harusnya Anda akan melihat versi, tanggal dan tanda `>>>`.
|
|
13
13
|
4. _OPSIONAL_. Anda bisa mengunduh dan menyiapkan kode editor seperti VS Code atau kode editor lainnya untuk menulis program. Atau kalau mau yang berbeda Anda bisa menggunakan Notepad.
|
|
14
14
|
5. Jika semua sudah aman dan berjalan dengan benar, sekarang Anda sudah bisa masuk ke sesi pengenalan bahasa PyScript!
|
|
15
15
|
|
|
@@ -42,8 +42,8 @@ Di sesi ini, Anda akan mempelajari semua aspek bahasa dalam bahasa PyScript yang
|
|
|
42
42
|
Pertama-tama Anda akan mempelajari tentang komentar, komentar adalah cara kita memberikan penjelasan tertentu pada blok kita agar jika suatu nanti atau orang lain bisa mengetahui maksud kode yang Anda tulis. Komentar di PyScript mirip dengan Python dimana ia dikuti dengan pagar `#` lalu setelah itu Anda bisa memberikan komentar. Komentar tidak diesekusi oleh program.
|
|
43
43
|
<pre class="pyscript-code"><span id="comment"># Ini adalah komentar</span><br><br><span id="comment"># Ini mencetak kata "Halo!" ke layar</span><br><span id="identifier-call">print</span><span id="parenthesis-0">(</span><span id="string">"Halo!"</span><span id="parenthesis-0">)</span><br><br><span id="number">1</span><span id="default"> + </span><span id="number">1</span><span id="default"> </span><span id="comment"># Ekspresi</span></pre>
|
|
44
44
|
|
|
45
|
-
### Variabel
|
|
46
|
-
Variabel secara singkat yakni menyimpan suatu nilai.
|
|
45
|
+
### Membuat Variabel (Operasi Penugasan)
|
|
46
|
+
Variabel secara singkat yakni menyimpan suatu nilai. Seharusnya Anda sudah tidak asing dengan variabel. Variabel di buat sebagai berikut ini:
|
|
47
47
|
<pre class="pyscript-code"><span id="identifier">x</span><span id="default"> = </span><span id="number">1</span><br><span id="identifier">y</span><span id="default"> = </span><span id="number">1</span><br><span id="identifier">z</span><span id="default"> = </span><span id="number">1</span></pre>
|
|
48
48
|
|
|
49
49
|
Di bahasa Python pun juga sama, kita membuat suatu nama lalu di lanjutkan tanda sama dengan lalu nilai yang mau kita isi.
|
|
@@ -55,7 +55,7 @@ Anda juga bisa sekaligus menyimpan lebih dari 1 variabel dengan hanya 1 nilai se
|
|
|
55
55
|
|
|
56
56
|
### Objek dan Tipe Data
|
|
57
57
|
Di PyScript sebenarnya objek dan tipe data di atur oleh Python. Jadi semua objek serta sifat-sifat dan fungsi-fungsinya semuanya di atur dari Python. Berikut ini beberapa objek literal dari Python/PyScript:
|
|
58
|
-
<pre class="pyscript-code"><span id="identifier">a</span><span id="default"> = </span><span id="number">1</span><span id="default"> </span><span id="comment"># int</span><br><span id="identifier">b</span><span id="default"> = </span><span id="number">1.0</span><span id="default"> </span><span id="comment"># float</span><br><span id="identifier">c</span><span id="default"> = </span><span id="number">1j</span><span id="default"> </span><span id="comment"># complex</span><br><span id="identifier">d</span><span id="default"> = </span><span id="number">1</span><span id="default">+</span><span id="number">1j</span><span id="default"> </span><span id="comment"># ini juga complex</span><br><span id="identifier">e</span><span id="default"> = </span><span id="string">'string'</span><span id="default"> </span><span id="comment">#
|
|
58
|
+
<pre class="pyscript-code"><span id="identifier">a</span><span id="default"> = </span><span id="number">1</span><span id="default"> </span><span id="comment"># int</span><br><span id="identifier">b</span><span id="default"> = </span><span id="number">1.0</span><span id="default"> </span><span id="comment"># float</span><br><span id="identifier">c</span><span id="default"> = </span><span id="number">1j</span><span id="default"> </span><span id="comment"># complex</span><br><span id="identifier">d</span><span id="default"> = </span><span id="number">1</span><span id="default">+</span><span id="number">1j</span><span id="default"> </span><span id="comment"># ini juga complex</span><br><span id="identifier">e</span><span id="default"> = </span><span id="string">'string'</span><span id="default"> </span><span id="comment"># str</span><br><span id="identifier">f</span><span id="default"> = </span><span id="string">"string"</span><span id="default"> </span><span id="comment"># ini juga str (beda kutipan saja)</span><br><span id="identifier">g</span><span id="default"> = </span><span id="string">r'raw'</span><span id="default"> </span><span id="comment"># raw str (string mentah tidak memproses escape)</span><br><span id="identifier">h</span><span id="default"> = </span><span id="string">b'bytes'</span><span id="default"> </span><span id="comment"># bytes</span><br><span id="identifier">i</span><span id="default"> = </span><span id="keyword-identifier">True</span><span id="default"> </span><span id="comment"># bool</span><br><span id="identifier">j</span><span id="default"> = </span><span id="keyword-identifier">False</span><span id="default"> </span><span id="comment"># ini juga bool (lawannya)</span><br><span id="identifier">k</span><span id="default"> = </span><span id="keyword-identifier">None</span><span id="default"> </span><span id="comment"># NoneType (tidak ada nilai)</span><br><span id="identifier">l</span><span id="default"> = </span><span id="parenthesis-0">[</span><span id="number">1</span><span id="default">, </span><span id="number">2</span><span id="parenthesis-0">]</span><span id="default"> </span><span id="comment"># list</span><br><span id="identifier">m</span><span id="default"> = </span><span id="parenthesis-0">(</span><span id="number">1</span><span id="default">, </span><span id="number">2</span><span id="parenthesis-0">)</span><span id="default"> </span><span id="comment"># tuple</span><br><span id="identifier">n</span><span id="default"> = </span><span id="parenthesis-0">{</span><span id="number">1</span><span id="default">, </span><span id="number">2</span><span id="parenthesis-0">}</span><span id="default"> </span><span id="comment"># set (himpunan)</span><br><span id="identifier">o</span><span id="default"> = </span><span id="parenthesis-0">{</span><span id="string">'a'</span><span id="default">: </span><span id="number">1</span><span id="parenthesis-0">}</span><span id="default"> </span><span id="comment"># dict (dictionary atau kamus)</span></pre>
|
|
59
59
|
|
|
60
60
|
Sebenarnya masih banyak pembahasan soal tipe data dan objek ini, Anda bisa mempelajarinya lebih dalam dari Python. Mungkin beberapa hal yang perlu Anda ketahui bahwa tidak semua literal Python bisa di tulis secara langsung di PyScript. Misalnya f-string atau formated string, untuk menulis literalnya di Python anda cukup beri prefix di string `f` seperti ini:
|
|
61
61
|
```py
|
|
@@ -131,7 +131,7 @@ Fungsi ini menggantikan sintaks Python yang ini:
|
|
|
131
131
|
```py
|
|
132
132
|
[wrap(i) for i in init if condition(i)]
|
|
133
133
|
```
|
|
134
|
-
Parameter `wrap` adalah berupa fungsi untuk menghasilkan nilai baru, parameter `condition` adalah berupa fungsi untuk memfilter nilai.
|
|
134
|
+
Parameter `wrap` adalah berupa fungsi untuk menghasilkan nilai baru, parameter `condition` adalah berupa fungsi untuk memfilter iterasi nilai.
|
|
135
135
|
|
|
136
136
|
- `isobjectof` (_`isobjectof(obj, class_or_tuple)`_) <br>
|
|
137
137
|
Fungsi ini mirip dengan fungsi _builtins_ Python `isinstance`, tetapi ini juga termasuk mengecek parameter `obj` adakah objek itu turunan dari `class_or_tuple` yang diberikan jika `obj` adalah berupa `type`.
|
|
@@ -172,12 +172,12 @@ Sisanya adalah operasi unik:
|
|
|
172
172
|
<pre class="pyscript-code"><span id="keyword-identifier">None</span><span id="default"> ?? </span><span id="number">0</span><span id="default"> </span><span id="comment"># operasi nullish (beda dengan or ia hanya peduli dengan nilai None)</span><br><span id="keyword-identifier">True</span><span id="default"> ? </span><span id="string">"Benar"</span><span id="default"> : </span><span id="string">"Salah"</span><span id="default"> </span><span id="comment"># operasi terner</span><br><br><span id="identifier">a</span><span id="default"> = </span><span id="number">0</span><br><br><span id="identifier">a</span><span id="default">++ </span><span id="comment"># operasi jumlahkan (menghasilkan nilai a sebelum di jumlahkan 1)</span><br><span id="default">++</span><span id="identifier">a</span><span id="default"> </span><span id="comment"># operasi jumlahkan (menghasilkan nilai a di tambahkan 1)</span><br><span id="identifier">a</span><span id="default">-- </span><span id="comment"># operasi kurangkan</span><br><span id="default">--</span><span id="identifier">a</span><span id="default"> </span><span id="comment"># operasi kurangkan</span></pre>
|
|
173
173
|
|
|
174
174
|
### Operasi Penugasan
|
|
175
|
-
Anda baru saja mempelajari cara menyimpan nilai ke sebuah variabel dan soal _unpacking variable_ itu semua adalah operasi penugasan. Operasi penugasan tidak berupa sama dengan `=`, tapi bisa operasi nilai seperti yang di sebutkan di atas berupa operasi-operasi, ini adalah cara sederhana memaksudkan arti `a = a <operasi> b` menjadi `a <operasi>= b`. Berikut ini contohnya:
|
|
176
|
-
<pre class="pyscript-code"><span id="identifier">a</span><span id="default"> = </span><span id="number">0</span><br><br><span id="identifier">a</span><span id="default"> += </span><span id="number">2</span><br><span id="identifier">a</span><span id="default"> -= </span><span id="number">1</span><br><span id="identifier">a</span><span id="default"> *= </span><span id="number">10</span><br><span id="identifier">a</span><span id="default"> /= </span><span id="number">2</span><br><span id="identifier">a</span><span id="default"> //= </span><span id="number">2</span><br><span id="identifier">a</span><span id="default"> %= </span><span id="number">3</span><br><span id="identifier">a</span><span id="default"> **= </span><span id="number">2</span><br><br><span id="identifier">b</span><span id="default"> =
|
|
175
|
+
Anda baru saja mempelajari cara menyimpan nilai ke sebuah variabel dan soal _unpacking variable_, itu semua adalah operasi penugasan. Operasi penugasan tidak berupa sama dengan `=`, tapi bisa operasi nilai seperti yang di sebutkan di atas berupa operasi-operasi, ini adalah cara sederhana memaksudkan arti `a = a <operasi> b` menjadi `a <operasi>= b`. Berikut ini contohnya:
|
|
176
|
+
<pre class="pyscript-code"><span id="identifier">a</span><span id="default"> = </span><span id="number">0</span><br><br><span id="identifier">a</span><span id="default"> += </span><span id="number">2</span><br><span id="identifier">a</span><span id="default"> -= </span><span id="number">1</span><br><span id="identifier">a</span><span id="default"> *= </span><span id="number">10</span><br><span id="identifier">a</span><span id="default"> /= </span><span id="number">2</span><br><span id="identifier">a</span><span id="default"> //= </span><span id="number">2</span><br><span id="identifier">a</span><span id="default"> %= </span><span id="number">3</span><br><span id="identifier">a</span><span id="default"> **= </span><span id="number">2</span><br><br><span id="identifier">b</span><span id="default"> = ...</span><br><span id="identifier">b</span><span id="default"> @= ...</span><br><br><span id="identifier">c</span><span id="default"> = </span><span id="number">8</span><br><span id="identifier">c</span><span id="default"> &= </span><span id="number">8</span><br><span id="identifier">c</span><span id="default"> |= </span><span id="number">16</span><br><span id="identifier">c</span><span id="default"> ^= </span><span id="number">2</span><br><span id="identifier">c</span><span id="default"> <<= </span><span id="number">2</span><br><span id="identifier">c</span><span id="default"> >>= </span><span id="number">2</span></pre>
|
|
177
177
|
|
|
178
178
|
### Blok kode
|
|
179
179
|
Blok kode dalam PyScript mengikuti bahasa seperti JavaScript, C, C++, dan sesamanya yang dimana menggunakan tanda kurung keriting `{}` untuk menyertakan bagian blok kode. Kadang, jika blok kode hanya berupa 1 statemen maka Anda bisa langsung menulis statemen itu tanpa perlu menggunakan tanda kurung.
|
|
180
|
-
<pre class="pyscript-code"><span id="keyword">if</span><span id="default"> </span><span id="parenthesis-0">(</span><span id="identifier">kondisi</span><span id="parenthesis-0">)</span><span id="default"> </span><span id="parenthesis-0">{</span><br><span id="default"> </span><span id="comment"># blok kode</span><br><span id="parenthesis-0">}</span><br><br><span id="keyword">if</span><span id="default"> </span><span id="parenthesis-0">(</span><span id="identifier">kondisi</span><span id="parenthesis-0">)</span><span id="default"> ... </span><span id="comment"># blok kode tunggal</span><br><br><span id="keyword">func</span><span id="default"> </span><span id="identifier-call">fufu</span><span id="parenthesis-0">(</span><span id="identifier">a</span><span id="parenthesis-0">)</span><span id="default"> </span><span id="parenthesis-0">{</span><br><span id="default"> </span><span id="keyword">if</span><span id="default"> </span><span id="parenthesis-1">(</span><span id="keyword-identifier">not</span><span id="default"> </span><span id="identifier">a</span><span id="parenthesis-1">)</span><span id="default"> </span><span id="keyword">return</span><span id="default">; </span><span id="comment"># statemen return seperti ini harus diberi</span><br><span id="default"> </span><span id="comment"># titik koma sebagai akhir statemen agar</span><br><span id="default"> </span><span id="comment"># tidak bocor ke statemen bawahnya</span><br><span id="default"> </span><span id="identifier">b</span><span id="default"> = </span><span id="identifier">a</span><br><span id="default"> </span><span id="keyword">return</span><span id="default"> </span><span id="identifier">a</span><br><span id="parenthesis-0">}</span><br><br><span id="comment"># kesalahan fatal (sulit diketahui karena apa)</span><br><span id="keyword">func</span><span id="default"> </span><span id="identifier-call">fafa</span><span id="parenthesis-0">(</span><span id="identifier">a</span><span id="parenthesis-0">)</span><span id="default"> </span><span id="parenthesis-0">{</span><br><span id="default"> </span><span id="keyword">if</span><span id="default"> </span><span id="parenthesis-1">(</span><span id="keyword-identifier">not</span><span id="default"> </span><span id="identifier">a</span><span id="parenthesis-1">)</span><span id="default"> </span><span id="keyword">return</span><span id="default"> </span><span id="comment"># tidak ada tanda koma</span><br><span id="default"> </span><span id="identifier">b</span><span id="default"> = </span><span id="identifier">a</span><span id="default"> </span><span id="comment"># parser mengiranya akan berupa return b</span><br><span id="default"> </span><span id="comment"># bukan return, hasilnya terjadi kesalahan di '='</span><br><span id="default"> </span><span id="keyword">return</span><span id="default"> </span><span id="identifier">a</span><br><span id="parenthesis-0">}</span><br><br><span id="identifier">loop</span><span id="default"> = </span><span id="number">100</span><br><span id="keyword">while</span><span id="default"> </span><span id="parenthesis-0">(</span><span id="identifier">loop</span><span id="default">--</span><span id="parenthesis-0">)</span><span id="default">; </span><span id="comment"># tanpa ada blok kode sama sekali (tidak berlaku</span><br><span id="default"> </span><span id="comment"># untuk semuanya kadang suatu statemen perlu blok kode)</span><br><span id="default"> </span><span id="comment"># sekali lagi jangan lupakan titik koma!</span></pre>
|
|
180
|
+
<pre class="pyscript-code"><span id="keyword">if</span><span id="default"> </span><span id="parenthesis-0">(</span><span id="identifier">kondisi</span><span id="parenthesis-0">)</span><span id="default"> </span><span id="parenthesis-0">{</span><br><span id="default"> </span><span id="comment"># blok kode</span><br><span id="parenthesis-0">}</span><br><br><span id="keyword">if</span><span id="default"> </span><span id="parenthesis-0">(</span><span id="identifier">kondisi</span><span id="parenthesis-0">)</span><span id="default"> ... </span><span id="comment"># blok kode tunggal</span><br><br><span id="keyword">func</span><span id="default"> </span><span id="identifier-call">fufu</span><span id="parenthesis-0">(</span><span id="identifier">a</span><span id="parenthesis-0">)</span><span id="default"> </span><span id="parenthesis-0">{</span><br><span id="default"> </span><span id="keyword">if</span><span id="default"> </span><span id="parenthesis-1">(</span><span id="keyword-identifier">not</span><span id="default"> </span><span id="identifier">a</span><span id="parenthesis-1">)</span><span id="default"> </span><span id="keyword">return</span><span id="default">; </span><span id="comment"># statemen return seperti ini harus diberi</span><br><span id="default"> </span><span id="comment"># titik koma sebagai akhir statemen agar</span><br><span id="default"> </span><span id="comment"># tidak bocor ke statemen bawahnya</span><br><span id="default"> </span><span id="identifier">b</span><span id="default"> = </span><span id="identifier">a</span><br><span id="default"> </span><span id="keyword">return</span><span id="default"> </span><span id="identifier">a</span><br><span id="parenthesis-0">}</span><br><br><span id="comment"># kesalahan fatal (sulit diketahui karena apa)</span><br><span id="keyword">func</span><span id="default"> </span><span id="identifier-call">fafa</span><span id="parenthesis-0">(</span><span id="identifier">a</span><span id="parenthesis-0">)</span><span id="default"> </span><span id="parenthesis-0">{</span><br><span id="default"> </span><span id="keyword">if</span><span id="default"> </span><span id="parenthesis-1">(</span><span id="keyword-identifier">not</span><span id="default"> </span><span id="identifier">a</span><span id="parenthesis-1">)</span><span id="default"> </span><span id="keyword">return</span><span id="default"> </span><span id="comment"># tidak ada tanda koma</span><br><span id="default"> </span><span id="identifier">b</span><span id="default"> = </span><span id="identifier">a</span><span id="default"> </span><span id="comment"># parser mengiranya akan berupa return b = a</span><br><span id="default"> </span><span id="comment"># bukan return, hasilnya terjadi kesalahan di '='</span><br><span id="default"> </span><span id="keyword">return</span><span id="default"> </span><span id="identifier">a</span><br><span id="parenthesis-0">}</span><br><br><span id="identifier">loop</span><span id="default"> = </span><span id="number">100</span><br><span id="keyword">while</span><span id="default"> </span><span id="parenthesis-0">(</span><span id="identifier">loop</span><span id="default">--</span><span id="parenthesis-0">)</span><span id="default">; </span><span id="comment"># tanpa ada blok kode sama sekali (tidak berlaku</span><br><span id="default"> </span><span id="comment"># untuk semuanya kadang suatu statemen perlu blok kode)</span><br><span id="default"> </span><span id="comment"># sekali lagi jangan lupakan titik koma!</span></pre>
|
|
181
181
|
|
|
182
182
|
### Statemen _if-elif-else_
|
|
183
183
|
Statemen ini berfungsi untuk mengecek suatu nilai kondisi dimana jika kondisi itu benar, maka blok kodenya akan dieksekusi. _elif_ atau singkatan dari _else if_ adalah lanjutan blok kondisi jika kondisi di atasnya tidak terpenuhi sampai jika semuanya tidak terpenuhi maka akan menuju blok _else_.
|
|
@@ -185,15 +185,15 @@ Statemen ini berfungsi untuk mengecek suatu nilai kondisi dimana jika kondisi it
|
|
|
185
185
|
|
|
186
186
|
### Statemen _for_
|
|
187
187
|
Statemen ini adalah statemen perulangan dimana biasanya perulangannya sudah di ketahui berapa kali.
|
|
188
|
-
<pre class="pyscript-code"><span id="comment"># perulangan 0 sampai 4 (totalnya 5 perulangan)</span><br><span id="keyword">for</span><span id="default"> </span><span id="parenthesis-0">(</span><span id="identifier">i</span><span id="default"> = </span><span id="number">0</span><span id="default">; </span><span id="identifier">i</span><span id="default"> < </span><span id="number">5</span><span id="default">; </span><span id="identifier">i</span><span id="default">++</span><span id="parenthesis-0">)</span><span id="default"> </span><span id="parenthesis-0">{</span><br><span id="default"> </span><span id="identifier-call">print</span><span id="parenthesis-1">(</span><span id="string">"i ke"</span><span id="default">, </span><span id="identifier">i</span><span id="parenthesis-1">)</span><br><span id="parenthesis-0">}</span><br><br><span id="comment"># strukturnya:</span><br><span id="comment"># for (<initilisasi>; <kondisi>; <pembaruan>) <blok perulangannnya></span><br><br><span id="comment"># for-each (perulangan tiap elemen)</span><br><span id="identifier">element</span><span id="default"> = </span><span id="parenthesis-0">[</span><span id="number">1</span><span id="default">, </span><span id="number">2</span><span id="default">, </span><span id="number">3</span><span id="default">, </span><span id="number">4</span><span id="default">, </span><span id="number">5</span><span id="parenthesis-0">]</span><br><span id="keyword">for</span><span id="default"> </span><span id="parenthesis-0">(</span><span id="identifier">i</span><span id="default"> </span><span id="keyword-identifier">of</span><span id="default"> </span><span id="identifier">element</span><span id="parenthesis-0">)</span><span id="default"> </span><span id="parenthesis-0">{</span><br><span id="default"> </span><span id="identifier-call">print</span><span id="parenthesis-1">(</span><span id="string">"i ke"</span><span id="default">, </span><span id="identifier">i</span><span id="parenthesis-1">)</span><br><span id="parenthesis-0">}</span></pre>
|
|
188
|
+
<pre class="pyscript-code"><span id="comment"># perulangan 0 sampai 4 (totalnya 5 perulangan)</span><br><span id="keyword">for</span><span id="default"> </span><span id="parenthesis-0">(</span><span id="identifier">i</span><span id="default"> = </span><span id="number">0</span><span id="default">; </span><span id="identifier">i</span><span id="default"> < </span><span id="number">5</span><span id="default">; </span><span id="identifier">i</span><span id="default">++</span><span id="parenthesis-0">)</span><span id="default"> </span><span id="parenthesis-0">{</span><br><span id="default"> </span><span id="identifier-call">print</span><span id="parenthesis-1">(</span><span id="string">"i ke"</span><span id="default">, </span><span id="identifier">i</span><span id="parenthesis-1">)</span><br><span id="parenthesis-0">}</span><br><br><span id="comment"># strukturnya:</span><br><span id="comment"># for (<initilisasi>; <kondisi>; <pembaruan>) <blok perulangannnya></span><br><br><span id="comment"># for-each (perulangan tiap elemen)</span><br><span id="identifier">element</span><span id="default"> = </span><span id="parenthesis-0">[</span><span id="number">1</span><span id="default">, </span><span id="number">2</span><span id="default">, </span><span id="number">3</span><span id="default">, </span><span id="number">4</span><span id="default">, </span><span id="number">5</span><span id="parenthesis-0">]</span><br><span id="keyword">for</span><span id="default"> </span><span id="parenthesis-0">(</span><span id="identifier">i</span><span id="default"> </span><span id="keyword-identifier">of</span><span id="default"> </span><span id="identifier">element</span><span id="parenthesis-0">)</span><span id="default"> </span><span id="parenthesis-0">{</span><br><span id="default"> </span><span id="identifier-call">print</span><span id="parenthesis-1">(</span><span id="string">"i ke"</span><span id="default">, </span><span id="identifier">i</span><span id="parenthesis-1">)</span><br><span id="parenthesis-0">}</span><br><br><span id="comment"># dengan blok else (diesekusi jika loop berhenti tanpa break)</span><br><span id="keyword">for</span><span id="default"> </span><span id="parenthesis-0">(</span><span id="identifier">i</span><span id="default"> </span><span id="keyword-identifier">of</span><span id="default"> </span><span id="identifier-class">range</span><span id="parenthesis-1">(</span><span id="number">5</span><span id="parenthesis-1">)</span><span id="parenthesis-0">)</span><span id="default"> </span><span id="parenthesis-0">{</span><br><span id="default"> </span><span id="identifier-call">print</span><span id="parenthesis-1">(</span><span id="identifier">i</span><span id="parenthesis-1">)</span><br><span id="parenthesis-0">}</span><span id="default"> </span><span id="keyword">else</span><span id="default"> </span><span id="parenthesis-0">{</span><br><span id="default"> </span><span id="identifier-call">print</span><span id="parenthesis-1">(</span><span id="string">"Selesai tanpa break"</span><span id="parenthesis-1">)</span><br><span id="parenthesis-0">}</span></pre>
|
|
189
189
|
|
|
190
190
|
### Statemen _while_
|
|
191
191
|
Statemen ini juga perulangan mirip dengan statemen _for_, tapi bedanya ini perulangannya belum diketahui sampai akhirnya kondisinya salah atau tidak memenuhi.
|
|
192
|
-
<pre class="pyscript-code"><span id="identifier">selesai</span><span id="default"> = </span><span id="keyword-identifier">False</span><br><span id="keyword">while</span><span id="default"> </span><span id="parenthesis-0">(</span><span id="keyword-identifier">not</span><span id="default"> </span><span id="identifier">selesai</span><span id="parenthesis-0">)</span><span id="default"> </span><span id="parenthesis-0">{</span><br><span id="default"> </span><span id="identifier">masukan</span><span id="default"> = </span><span id="identifier-call">input</span><span id="parenthesis-1">(</span><span id="string">"Ketik sesuatu (keluar untuk keluar): "</span><span id="parenthesis-1">)</span><br><span id="default"> </span><span id="keyword">if</span><span id="default"> </span><span id="parenthesis-1">(</span><span id="identifier">masukan</span><span id="default">.</span><span id="identifier-call">strip</span><span id="parenthesis-2">()</span><span id="default">.</span><span id="identifier-call">lower</span><span id="parenthesis-2">()</span><span id="default"> == </span><span id="string">'keluar'</span><span id="parenthesis-1">)</span><span id="default"> </span><span id="parenthesis-1">{</span><br><span id="default"> </span><span id="identifier">selesai</span><span id="default"> = </span><span id="keyword-identifier">True</span><br><span id="default"> </span><span id="parenthesis-1">}</span><br><span id="default"> </span><span id="identifier-call">print</span><span id="parenthesis-
|
|
192
|
+
<pre class="pyscript-code"><span id="identifier">selesai</span><span id="default"> = </span><span id="keyword-identifier">False</span><br><br><span id="keyword">while</span><span id="default"> </span><span id="parenthesis-0">(</span><span id="keyword-identifier">not</span><span id="default"> </span><span id="identifier">selesai</span><span id="parenthesis-0">)</span><span id="default"> </span><span id="parenthesis-0">{</span><br><span id="default"> </span><span id="identifier">masukan</span><span id="default"> = </span><span id="identifier-call">input</span><span id="parenthesis-1">(</span><span id="string">"Ketik sesuatu (keluar untuk keluar): "</span><span id="parenthesis-1">)</span><br><br><span id="default"> </span><span id="keyword">if</span><span id="default"> </span><span id="parenthesis-1">(</span><span id="identifier">masukan</span><span id="default">.</span><span id="identifier-call">strip</span><span id="parenthesis-2">()</span><span id="default">.</span><span id="identifier-call">lower</span><span id="parenthesis-2">()</span><span id="default"> == </span><span id="string">'keluar'</span><span id="parenthesis-1">)</span><span id="default"> </span><span id="parenthesis-1">{</span><br><span id="default"> </span><span id="identifier">selesai</span><span id="default"> = </span><span id="keyword-identifier">True</span><br><span id="default"> </span><span id="parenthesis-1">}</span><br><span id="default"> </span><span id="keyword">else</span><span id="default"> </span><span id="parenthesis-1">{</span><br><span id="default"> </span><span id="identifier-call">print</span><span id="parenthesis-2">(</span><span id="string">"Anda memasukan:"</span><span id="default">, </span><span id="identifier">masukan</span><span id="parenthesis-2">)</span><br><span id="default"> </span><span id="parenthesis-1">}</span><br><span id="parenthesis-0">}</span><br><br><span id="identifier">i</span><span id="default"> = </span><span id="number">5</span><br><br><span id="comment"># dengan blok else</span><br><span id="keyword">while</span><span id="default"> </span><span id="parenthesis-0">(</span><span id="identifier">i</span><span id="parenthesis-0">){</span><br><span id="default"> </span><span id="identifier-call">print</span><span id="parenthesis-1">(</span><span id="identifier">i</span><span id="default">--</span><span id="parenthesis-1">)</span><br><span id="parenthesis-0">}</span><span id="default"> </span><span id="keyword">else</span><span id="default"> </span><span id="parenthesis-0">{</span><br><span id="default"> </span><span id="identifier-call">print</span><span id="parenthesis-1">(</span><span id="string">"Selesai tanpa break"</span><span id="parenthesis-1">)</span><br><span id="parenthesis-0">}</span></pre>
|
|
193
193
|
|
|
194
194
|
### Statemen _do-while_
|
|
195
195
|
Statemen perulangan ini mirip dengan statemen _while_, bedanya adalah blok kode setidaknya dijalankan sekali meski kondisinya salah atau tidak memenuhi sejak awal.
|
|
196
|
-
<pre class="pyscript-code"><span id="identifier">selanjutnya</span><span id="default"> = </span><span id="keyword-identifier">False</span><br><span id="keyword">do</span><span id="default"> </span><span id="parenthesis-0">{</span><br><span id="default"> </span><span id="identifier-call">print</span><span id="parenthesis-1">(</span><span id="string">"Selanjutnya"</span><span id="parenthesis-1">)</span><br><span id="parenthesis-0">}</span><span id="default"> </span><span id="keyword">while</span><span id="default"> </span><span id="parenthesis-0">(</span><span id="identifier">selanjutnya</span><span id="parenthesis-0">)</span></pre>
|
|
196
|
+
<pre class="pyscript-code"><span id="identifier">selanjutnya</span><span id="default"> = </span><span id="keyword-identifier">False</span><br><span id="keyword">do</span><span id="default"> </span><span id="parenthesis-0">{</span><br><span id="default"> </span><span id="identifier-call">print</span><span id="parenthesis-1">(</span><span id="string">"Selanjutnya"</span><span id="parenthesis-1">)</span><br><span id="parenthesis-0">}</span><span id="default"> </span><span id="keyword">while</span><span id="default"> </span><span id="parenthesis-0">(</span><span id="identifier">selanjutnya</span><span id="parenthesis-0">)</span><br><br><span id="identifier">i</span><span id="default"> = </span><span id="number">0</span><br><br><span id="comment"># dengan blok else</span><br><span id="keyword">do</span><span id="default"> </span><span id="parenthesis-0">{</span><br><span id="default"> </span><span id="identifier">i</span><span id="default">++</span><br><span id="parenthesis-0">}</span><span id="default"> </span><span id="keyword">while</span><span id="default"> </span><span id="parenthesis-0">(</span><span id="identifier">i</span><span id="default"> < </span><span id="number">5</span><span id="parenthesis-0">)</span><span id="default"> </span><span id="keyword">else</span><span id="default"> </span><span id="parenthesis-0">{</span><br><span id="default"> </span><span id="identifier-call">print</span><span id="parenthesis-1">(</span><span id="string">"Selesai tanpa break"</span><span id="parenthesis-1">)</span><br><span id="parenthesis-0">}</span></pre>
|
|
197
197
|
|
|
198
198
|
### Statemen _switch-case-default_
|
|
199
199
|
Statemen ini adalah bentuk kontrol untuk memilih suatu aksi dari target nilai yang diberikan untuk dijalankan.
|
{pyscript_programming_language-1.2.0 → pyscript_programming_language-1.2.1}/pyscript/__main__.py
RENAMED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
from .core.buffer import PysFileBuffer
|
|
2
2
|
from .core.constants import DEFAULT, OPTIMIZE
|
|
3
|
+
from .core.handlers import handle_execute
|
|
3
4
|
from .core.highlight import HLFMT_HTML, HLFMT_ANSI, pys_highlight
|
|
4
5
|
from .core.runner import pys_runner, pys_shell
|
|
5
|
-
from .core.utils import normalize_path, build_symbol_table
|
|
6
|
+
from .core.utils import normalize_path, build_symbol_table
|
|
6
7
|
from .core.version import __version__
|
|
7
8
|
|
|
8
9
|
from argparse import ArgumentParser
|
|
@@ -23,7 +24,7 @@ parser.add_argument(
|
|
|
23
24
|
)
|
|
24
25
|
|
|
25
26
|
parser.add_argument(
|
|
26
|
-
'-v', '--version',
|
|
27
|
+
'-v', '-V', '--version',
|
|
27
28
|
action='version',
|
|
28
29
|
version="PyScript {}".format(__version__),
|
|
29
30
|
)
|
|
@@ -51,7 +52,7 @@ parser.add_argument(
|
|
|
51
52
|
'-l', '--highlight',
|
|
52
53
|
choices=('html', 'ansi'),
|
|
53
54
|
default=None,
|
|
54
|
-
help='generate highlight code from a file'
|
|
55
|
+
help='generate PyScript highlight code from a file'
|
|
55
56
|
)
|
|
56
57
|
|
|
57
58
|
args = parser.parse_args()
|
|
@@ -9,6 +9,7 @@ from . import (
|
|
|
9
9
|
constants,
|
|
10
10
|
context,
|
|
11
11
|
exceptions,
|
|
12
|
+
handlers,
|
|
12
13
|
highlight,
|
|
13
14
|
interpreter,
|
|
14
15
|
lexer,
|
|
@@ -34,6 +35,7 @@ __all__ = [
|
|
|
34
35
|
'constants',
|
|
35
36
|
'context',
|
|
36
37
|
'exceptions',
|
|
38
|
+
'handlers',
|
|
37
39
|
'highlight',
|
|
38
40
|
'interpreter',
|
|
39
41
|
'lexer',
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
from .cache import hook
|
|
2
|
+
from .exceptions import PysException, PysShouldReturn
|
|
3
|
+
from .objects import PysChainFunction, PysFunction
|
|
4
|
+
from .utils import is_object_of
|
|
5
|
+
|
|
6
|
+
from contextlib import contextmanager
|
|
7
|
+
from types import MethodType
|
|
8
|
+
|
|
9
|
+
@contextmanager
|
|
10
|
+
def handle_exception(result, context, position):
|
|
11
|
+
try:
|
|
12
|
+
yield
|
|
13
|
+
except PysShouldReturn as e:
|
|
14
|
+
result.register(e.result)
|
|
15
|
+
except BaseException as e:
|
|
16
|
+
result.failure(PysException(e, context, position))
|
|
17
|
+
|
|
18
|
+
def handle_call(object, context, position, flags):
|
|
19
|
+
if isinstance(object, PysFunction):
|
|
20
|
+
object.__code__.call_context = context
|
|
21
|
+
object.__code__.position = position
|
|
22
|
+
object.__code__.flags = flags
|
|
23
|
+
|
|
24
|
+
elif isinstance(object, PysChainFunction):
|
|
25
|
+
object.__code__.context = context
|
|
26
|
+
object.__code__.position = position
|
|
27
|
+
object.__code__.flags = flags
|
|
28
|
+
|
|
29
|
+
elif isinstance(object, MethodType) and isinstance(object.__func__, PysFunction):
|
|
30
|
+
object.__func__.__code__.call_context = context
|
|
31
|
+
object.__func__.__code__.position = position
|
|
32
|
+
object.__func__.__code__.flags = flags
|
|
33
|
+
|
|
34
|
+
elif isinstance(object, type):
|
|
35
|
+
|
|
36
|
+
for call in ('__init__', '__new__'):
|
|
37
|
+
fn = getattr(object, call, None)
|
|
38
|
+
|
|
39
|
+
if isinstance(fn, PysFunction):
|
|
40
|
+
fn.__code__.call_context = context
|
|
41
|
+
fn.__code__.position = position
|
|
42
|
+
fn.__code__.flags = flags
|
|
43
|
+
|
|
44
|
+
def handle_execute(result):
|
|
45
|
+
try:
|
|
46
|
+
|
|
47
|
+
if result.error:
|
|
48
|
+
if is_object_of(result.error.exception, SystemExit):
|
|
49
|
+
return result.error.exception.code
|
|
50
|
+
if hook.exception is not None:
|
|
51
|
+
hook.exception(result.error)
|
|
52
|
+
return 1
|
|
53
|
+
|
|
54
|
+
elif len(result.result) == 1 and hook.display is not None:
|
|
55
|
+
hook.display(result.result[0])
|
|
56
|
+
|
|
57
|
+
except:
|
|
58
|
+
return 1
|
|
59
|
+
|
|
60
|
+
return 0
|
|
@@ -23,19 +23,19 @@ class _HighlightFormatter(Pys):
|
|
|
23
23
|
return self.formater(*args, **kwargs)
|
|
24
24
|
|
|
25
25
|
def formater(self, type, position, content):
|
|
26
|
-
contented = self.content_block(
|
|
26
|
+
contented = self.content_block(position, content)
|
|
27
27
|
result = ''
|
|
28
28
|
|
|
29
29
|
if type == 'newline':
|
|
30
30
|
if self._open:
|
|
31
|
-
result += self.close_block(
|
|
31
|
+
result += self.close_block(position, self._type)
|
|
32
32
|
self._open = False
|
|
33
33
|
|
|
34
|
-
result += self.newline_block(position
|
|
34
|
+
result += self.newline_block(position)
|
|
35
35
|
|
|
36
36
|
elif type == 'end':
|
|
37
37
|
if self._open:
|
|
38
|
-
result += self.close_block(
|
|
38
|
+
result += self.close_block(position, self._type)
|
|
39
39
|
self._open = False
|
|
40
40
|
|
|
41
41
|
elif type == self._type and self._open:
|
|
@@ -43,36 +43,37 @@ class _HighlightFormatter(Pys):
|
|
|
43
43
|
|
|
44
44
|
else:
|
|
45
45
|
if self._open:
|
|
46
|
-
result += self.close_block(
|
|
46
|
+
result += self.close_block(position, self._type)
|
|
47
|
+
|
|
48
|
+
result += self.open_block(position, type)
|
|
49
|
+
result += contented
|
|
47
50
|
|
|
48
|
-
result += self.open_block(type, position, contented)
|
|
49
51
|
self._open = True
|
|
50
52
|
|
|
51
53
|
self._type = type
|
|
52
54
|
return result
|
|
53
55
|
|
|
54
|
-
def _ansi_open_block(
|
|
56
|
+
def _ansi_open_block(position, type):
|
|
55
57
|
color = HIGHLIGHT.get(type, 'default')
|
|
56
58
|
|
|
57
|
-
return '\x1b[38;2;{};{};{}m
|
|
59
|
+
return '\x1b[38;2;{};{};{}m'.format(
|
|
58
60
|
int(color[1:3], 16),
|
|
59
61
|
int(color[3:5], 16),
|
|
60
|
-
int(color[5:7], 16)
|
|
61
|
-
content
|
|
62
|
+
int(color[5:7], 16)
|
|
62
63
|
)
|
|
63
64
|
|
|
64
65
|
HLFMT_HTML = _HighlightFormatter(
|
|
65
|
-
lambda
|
|
66
|
-
lambda
|
|
67
|
-
lambda
|
|
68
|
-
lambda position
|
|
66
|
+
lambda position, content: sanitize_newline('<br>', html_escape(content)),
|
|
67
|
+
lambda position, type: '<span style="color:{}">'.format(HIGHLIGHT.get(type, 'default')),
|
|
68
|
+
lambda position, type: '</span>',
|
|
69
|
+
lambda position: '<br>'
|
|
69
70
|
)
|
|
70
71
|
|
|
71
72
|
HLFMT_ANSI = _HighlightFormatter(
|
|
72
|
-
lambda
|
|
73
|
+
lambda position, content: sanitize_newline('\n', content),
|
|
73
74
|
_ansi_open_block,
|
|
74
|
-
lambda
|
|
75
|
-
lambda position
|
|
75
|
+
lambda position, type: '\x1b[0m',
|
|
76
|
+
lambda position: '\n'
|
|
76
77
|
)
|
|
77
78
|
|
|
78
79
|
def pys_highlight(source, format=None, max_parenthesis_level=3, flags=DEFAULT):
|
|
@@ -199,4 +200,6 @@ def pys_highlight(source, format=None, max_parenthesis_level=3, flags=DEFAULT):
|
|
|
199
200
|
if token.type == TOKENS['EOF']:
|
|
200
201
|
break
|
|
201
202
|
|
|
202
|
-
return result
|
|
203
|
+
return result
|
|
204
|
+
|
|
205
|
+
del _ansi_open_block
|