pyscript-programming-language 1.12.13__tar.gz → 1.13.0__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.
- pyscript_programming_language-1.13.0/PKG-INFO +156 -0
- pyscript_programming_language-1.13.0/README.md +124 -0
- pyscript_programming_language-1.13.0/changelog.md +27 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyproject.toml +2 -2
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/cache.py +1 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/constants.py +4 -3
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/highlight.py +8 -9
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/interpreter.py +18 -42
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/lexer.py +1 -3
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/mapping.py +12 -9
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/parser.py +57 -20
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/position.py +8 -7
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/pysbuiltins.py +53 -87
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/pystypes.py +6 -2
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/runner.py +21 -14
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/shell.py +1 -1
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/symtab.py +30 -27
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/token.py +12 -8
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/utils/debug.py +1 -2
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/utils/generic.py +1 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/utils/string.py +3 -3
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/version.py +3 -3
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/lib/ast/ast_literal_eval.py +14 -5
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/lib/ast/ast_unparse.py +3 -19
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/lib/inspect.pys +2 -2
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/lib/parser.pys +16 -3
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/lib/site.pys +3 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/lib/tokenize/__init__.pys +1 -1
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/lib/tokenize/tok_untokenize.py +2 -2
- pyscript_programming_language-1.13.0/pyscript_programming_language.egg-info/PKG-INFO +156 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/setup.py +2 -2
- pyscript_programming_language-1.12.13/PKG-INFO +0 -150
- pyscript_programming_language-1.12.13/README.md +0 -118
- pyscript_programming_language-1.12.13/changelog.md +0 -11
- pyscript_programming_language-1.12.13/pyscript_programming_language.egg-info/PKG-INFO +0 -150
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/MANIFEST.in +0 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/__init__.py +0 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/__init__.pyi +0 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/__main__.py +0 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/__init__.py +0 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/analyzer.py +0 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/bases.py +0 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/buffer.py +0 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/checks.py +0 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/context.py +0 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/editor/__init__.py +0 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/editor/bases.py +0 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/editor/gui.py +0 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/editor/terminal.py +0 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/exceptions.py +0 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/handlers.py +0 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/nodes.py +0 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/results.py +0 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/utils/__init__.py +0 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/utils/ansi.py +0 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/utils/decorators.py +0 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/utils/module.py +0 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/utils/path.py +0 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/utils/similarity.py +0 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/lib/__hello__.pys +0 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/lib/ansi.pys +0 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/lib/ast/__init__.pys +0 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/lib/ast/ast_dump.py +0 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/lib/ast/ast_walk.py +0 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/lib/brainfuck.pys +0 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/lib/code.pys +0 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/lib/dis.pys +0 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/lib/explorer.pys +0 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/lib/fpstimer/__init__.pys +0 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/lib/fpstimer/py_fpstimer.py +0 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/lib/getch/__init__.pys +0 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/lib/getch/py_getch.py +0 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/lib/history.pys +0 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/lib/jsdict.pys +0 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/lib/keyword.pys +0 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/lib/opcode.pys +0 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/lib/pdisplay.pys +0 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/lib/symtable.pys +0 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/lib/token.pys +0 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/other/.nomedia +0 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/other/PyScript.ico +0 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/other/copyright +0 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/other/credits +0 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/other/license +0 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/site-packages/this.pys +0 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/this.py +0 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript_programming_language.egg-info/SOURCES.txt +0 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript_programming_language.egg-info/dependency_links.txt +0 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript_programming_language.egg-info/requires.txt +0 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript_programming_language.egg-info/top_level.txt +0 -0
- {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/setup.cfg +0 -0
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: pyscript-programming-language
|
|
3
|
+
Version: 1.13.0
|
|
4
|
+
Summary: PyScript Programming Language
|
|
5
|
+
Home-page: https://azzammuhyala.github.io/pyscript
|
|
6
|
+
Author: Azzam Muhyala
|
|
7
|
+
Author-email: Azzam Muhyala <azzammuhyala@gmail.com>
|
|
8
|
+
License-Expression: MIT
|
|
9
|
+
Project-URL: Homepage, https://azzammuhyala.github.io/pyscript
|
|
10
|
+
Project-URL: Documentation, https://azzammuhyala.github.io/pyscript
|
|
11
|
+
Project-URL: Source, https://github.com/azzammuhyala/pyscript
|
|
12
|
+
Project-URL: Releases, https://github.com/azzammuhyala/pyscript/releases
|
|
13
|
+
Project-URL: Change Log, https://github.com/azzammuhyala/pyscript/blob/main/changelog.md
|
|
14
|
+
Project-URL: Bug Tracker, https://github.com/azzammuhyala/pyscript/issues
|
|
15
|
+
Project-URL: PyPi Stats, https://pepy.tech/projects/pyscript-programming-language
|
|
16
|
+
Keywords: pyscript,pyslang,pys,programming,language,programming language
|
|
17
|
+
Classifier: Programming Language :: Python
|
|
18
|
+
Classifier: Programming Language :: Python :: 3
|
|
19
|
+
Classifier: Intended Audience :: Developers
|
|
20
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
21
|
+
Classifier: Topic :: Software Development :: Interpreters
|
|
22
|
+
Classifier: Topic :: Software Development :: Compilers
|
|
23
|
+
Requires-Python: >=3.10
|
|
24
|
+
Description-Content-Type: text/markdown
|
|
25
|
+
Provides-Extra: other
|
|
26
|
+
Requires-Dist: beartype; extra == "other"
|
|
27
|
+
Requires-Dist: pygments; extra == "other"
|
|
28
|
+
Requires-Dist: prompt_toolkit; extra == "other"
|
|
29
|
+
Dynamic: author
|
|
30
|
+
Dynamic: home-page
|
|
31
|
+
Dynamic: requires-python
|
|
32
|
+
|
|
33
|
+
# PyScript
|
|
34
|
+
|
|
35
|
+
<div align="center">
|
|
36
|
+
<img src="https://github.com/azzammuhyala/pyscript/blob/main/PyScript.png?raw=true" alt="PyScript Logo" width="200">
|
|
37
|
+
<br>
|
|
38
|
+
<a href="https://pepy.tech/project/pyscript-programming-language">
|
|
39
|
+
<img src="https://static.pepy.tech/personalized-badge/pyscript-programming-language?period=total&units=NONE&left_color=GRAY&right_color=GREEN&left_text=downloads" alt="PyPI Downloads">
|
|
40
|
+
</a>
|
|
41
|
+
<a href="https://en.wikipedia.org/wiki/MIT_License">
|
|
42
|
+
<img src="https://img.shields.io/badge/license-MIT-orange" alt="License MIT">
|
|
43
|
+
</a>
|
|
44
|
+
<a href="https://www.python.org/">
|
|
45
|
+
<img src="https://img.shields.io/badge/python-3.10-yellow" alt="Python 3.10+">
|
|
46
|
+
</a>
|
|
47
|
+
</div>
|
|
48
|
+
|
|
49
|
+
PyScript is a programming language built on top of Python. It combines some syntax from Python and JavaScript, so if
|
|
50
|
+
you're already familiar with Python, JavaScript or both, it should be quite easy to learn.
|
|
51
|
+
|
|
52
|
+
## Introduction 📖
|
|
53
|
+
PyScript may not be the language we'll be discussing, but the name PyScript already exists, a flexible and platform for
|
|
54
|
+
running Python in a browser. Since it's inception, the language was inspired by Python and JavaScript, which are
|
|
55
|
+
relatively easy for humans to read. This name was chosen because it wasn't immediately known whether this name was
|
|
56
|
+
already in use.
|
|
57
|
+
|
|
58
|
+
This language wasn't designed to compete with other modern programming languages, but rather as a learning for
|
|
59
|
+
understanding how programming languages work and how human written code can be understood by machines. Furthermore, this
|
|
60
|
+
language was created as a relatively complex project. Using Python as the foundation for PyScript, it's easy to
|
|
61
|
+
understand how the language is built without having to understand complex instructions like those in C, C++, and other
|
|
62
|
+
low-level languages.
|
|
63
|
+
|
|
64
|
+
To learn more about PyScript, you can see on [PyScript documentation](https://azzammuhyala.github.io/pyscript) or
|
|
65
|
+
[PyScript repository](https://github.com/azzammuhyala/pyscript) for full source code.
|
|
66
|
+
|
|
67
|
+
## Try PyScript ▶️
|
|
68
|
+
Try [PyScript Shell (_REPL_)](https://azzammuhyala.github.io/pyscript/shell.html) inside your browser directly
|
|
69
|
+
(no installation required).
|
|
70
|
+
|
|
71
|
+
## Installation ⬇️
|
|
72
|
+
First, you'll need to download Python. Make sure you're using the latest version above `3.10`, to ensure the code runs
|
|
73
|
+
correctly. Visit the official [Python website](https://python.org) to download it.
|
|
74
|
+
|
|
75
|
+
Next, after downloading and configuring the Python application, you can download the PyScript from
|
|
76
|
+
[PyScript releases](https://github.com/azzammuhyala/pyscript/releases) or from PIP with this command (_Recommended_):
|
|
77
|
+
```sh
|
|
78
|
+
pip install -U pyscript-programming-language
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
[_OPTIONAL_] You can download additional libraries that PyScript requires with this command:
|
|
82
|
+
```sh
|
|
83
|
+
pip install -U pyscript-programming-language[other]
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
And also, you can download PyScript with `git`:
|
|
87
|
+
```sh
|
|
88
|
+
git clone https://github.com/azzammuhyala/pyscript
|
|
89
|
+
cd pyscript
|
|
90
|
+
pip install .
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
After that, you can run the PyScript shell (_REPL_) with this command:
|
|
94
|
+
```sh
|
|
95
|
+
python -m pyscript
|
|
96
|
+
```
|
|
97
|
+
If successful, you can see the version, release date, and a `>>>` like Python shell (_REPL_).
|
|
98
|
+
|
|
99
|
+
## Example 📜
|
|
100
|
+
Familiar? There it is!
|
|
101
|
+
<pre><span style="color:#549952"># get a number and operator with input()</span><span style="color:#D4D4D4"><br></span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4"> = </span><span style="color:#4EC9B0">float</span><span style="color:#FFD705">(</span><span style="color:#DCDCAA">input</span><span style="color:#D45DBA">(</span><span style="color:#CE9178">"Enter a first number : "</span><span style="color:#D45DBA">)</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"><br></span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4"> = </span><span style="color:#4EC9B0">float</span><span style="color:#FFD705">(</span><span style="color:#DCDCAA">input</span><span style="color:#D45DBA">(</span><span style="color:#CE9178">"Enter a second number: "</span><span style="color:#D45DBA">)</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"><br></span><span style="color:#8CDCFE">operation</span><span style="color:#D4D4D4"> = </span><span style="color:#DCDCAA">input</span><span style="color:#FFD705">(</span><span style="color:#CE9178">"Enter an operation (+, -, *, /): "</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"><br><br></span><span style="color:#549952"># define a functions</span><span style="color:#D4D4D4"><br></span><span style="color:#307CD6">func</span><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">add</span><span style="color:#FFD705">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"> </span><span style="color:#FFD705">{</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">return</span><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4"> + </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4"><br></span><span style="color:#FFD705">}</span><span style="color:#D4D4D4"><br><br></span><span style="color:#307CD6">func</span><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">sub</span><span style="color:#FFD705">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"> </span><span style="color:#FFD705">{</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">return</span><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4"> - </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4"><br></span><span style="color:#FFD705">}</span><span style="color:#D4D4D4"><br><br></span><span style="color:#307CD6">func</span><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">mul</span><span style="color:#FFD705">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"> </span><span style="color:#FFD705">{</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">return</span><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4"> * </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4"><br></span><span style="color:#FFD705">}</span><span style="color:#D4D4D4"><br><br></span><span style="color:#307CD6">func</span><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">floordiv</span><span style="color:#FFD705">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"> </span><span style="color:#FFD705">{</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#549952"># check b is zero</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">return</span><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4"> != </span><span style="color:#B5CEA8">0</span><span style="color:#D4D4D4"> ? </span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4"> / </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4"> : </span><span style="color:#307CD6">none</span><span style="color:#D4D4D4"><br></span><span style="color:#FFD705">}</span><span style="color:#D4D4D4"><br><br></span><span style="color:#549952"># operation matching</span><span style="color:#D4D4D4"><br></span><span style="color:#C586C0">switch</span><span style="color:#D4D4D4"> </span><span style="color:#FFD705">(</span><span style="color:#8CDCFE">operation</span><span style="color:#D4D4D4">.</span><span style="color:#DCDCAA">strip</span><span style="color:#D45DBA">()</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"><br></span><span style="color:#FFD705">{</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">case</span><span style="color:#D4D4D4"> </span><span style="color:#CE9178">'+'</span><span style="color:#D4D4D4">:</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">result</span><span style="color:#D4D4D4"> = </span><span style="color:#DCDCAA">add</span><span style="color:#D45DBA">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#D45DBA">)</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">print</span><span style="color:#D45DBA">(</span><span style="color:#CE9178">"Result of {:,} + {:,} = {:,}"</span><span style="color:#D4D4D4">.</span><span style="color:#DCDCAA">format</span><span style="color:#1A9FFF">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">result</span><span style="color:#1A9FFF">)</span><span style="color:#D45DBA">)</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">break</span><span style="color:#D4D4D4"><br><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">case</span><span style="color:#D4D4D4"> </span><span style="color:#CE9178">'-'</span><span style="color:#D4D4D4">:</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">result</span><span style="color:#D4D4D4"> = </span><span style="color:#DCDCAA">sub</span><span style="color:#D45DBA">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#D45DBA">)</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">print</span><span style="color:#D45DBA">(</span><span style="color:#CE9178">"Result of {:,} - {:,} = {:,}"</span><span style="color:#D4D4D4">.</span><span style="color:#DCDCAA">format</span><span style="color:#1A9FFF">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">result</span><span style="color:#1A9FFF">)</span><span style="color:#D45DBA">)</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">break</span><span style="color:#D4D4D4"><br><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">case</span><span style="color:#D4D4D4"> </span><span style="color:#CE9178">'*'</span><span style="color:#D4D4D4">:</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">result</span><span style="color:#D4D4D4"> = </span><span style="color:#DCDCAA">mul</span><span style="color:#D45DBA">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#D45DBA">)</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">print</span><span style="color:#D45DBA">(</span><span style="color:#CE9178">"Result of {:,} * {:,} = {:,}"</span><span style="color:#D4D4D4">.</span><span style="color:#DCDCAA">format</span><span style="color:#1A9FFF">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">result</span><span style="color:#1A9FFF">)</span><span style="color:#D45DBA">)</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">break</span><span style="color:#D4D4D4"><br><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">case</span><span style="color:#D4D4D4"> </span><span style="color:#CE9178">'/'</span><span style="color:#D4D4D4">:</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">result</span><span style="color:#D4D4D4"> = </span><span style="color:#DCDCAA">floordiv</span><span style="color:#D45DBA">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#D45DBA">)</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">print</span><span style="color:#D45DBA">(</span><span style="color:#CE9178">"Result of {:,} / {:,} = {}"</span><span style="color:#D4D4D4">.</span><span style="color:#DCDCAA">format</span><span style="color:#1A9FFF">(</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4">,</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">result</span><span style="color:#D4D4D4"> </span><span style="color:#307CD6">is</span><span style="color:#D4D4D4"> </span><span style="color:#307CD6">not</span><span style="color:#D4D4D4"> </span><span style="color:#307CD6">none</span><span style="color:#D4D4D4"> ? </span><span style="color:#DCDCAA">format</span><span style="color:#FFD705">(</span><span style="color:#8CDCFE">result</span><span style="color:#D4D4D4">, </span><span style="color:#CE9178">','</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"> : </span><span style="color:#CE9178">"Cannot be divided by 0"</span><span style="color:#1A9FFF">)</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#D45DBA">)</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">break</span><span style="color:#D4D4D4"><br><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">default</span><span style="color:#D4D4D4">:</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">print</span><span style="color:#D45DBA">(</span><span style="color:#CE9178">"Unknown operation"</span><span style="color:#D45DBA">)</span><span style="color:#D4D4D4"><br></span><span style="color:#FFD705">}</span></pre>
|
|
102
|
+
|
|
103
|
+
## Library Requirements 📓
|
|
104
|
+
| No | Name | Status |
|
|
105
|
+
|:--:|:------------------|:----------------------:|
|
|
106
|
+
| 1 | `argparse` | **required** |
|
|
107
|
+
| 2 | `builtins` | **required** |
|
|
108
|
+
| 3 | `collections.abc` | **required** |
|
|
109
|
+
| 4 | `functools` | **required** |
|
|
110
|
+
| 5 | `html` | **required** |
|
|
111
|
+
| 6 | `importlib` | **required** |
|
|
112
|
+
| 7 | `inspect` | **required** |
|
|
113
|
+
| 8 | `io` | **required** |
|
|
114
|
+
| 9 | `itertools` | **required** |
|
|
115
|
+
| 10 | `json` | **required** |
|
|
116
|
+
| 11 | `math` | **required** |
|
|
117
|
+
| 12 | `operator` | **required** |
|
|
118
|
+
| 13 | `os` | **required** |
|
|
119
|
+
| 14 | `re` | **required** |
|
|
120
|
+
| 15 | `subprocess` | **required** |
|
|
121
|
+
| 16 | `sys` | **required** |
|
|
122
|
+
| 17 | `threading` | **required** |
|
|
123
|
+
| 18 | `types` | **required** |
|
|
124
|
+
| 19 | `typing` | **required** |
|
|
125
|
+
| 20 | `unicodedata` | **required** |
|
|
126
|
+
| 1 | `ast` | **required (library)** |
|
|
127
|
+
| 2 | `msvcrt` | **required (library)** |
|
|
128
|
+
| 3 | `pprint` | **required (library)** |
|
|
129
|
+
| 4 | `shutil` | **required (library)** |
|
|
130
|
+
| 5 | `stat` | **required (library)** |
|
|
131
|
+
| 6 | `termios` | **required (library)** |
|
|
132
|
+
| 7 | `time` | **required (library)** |
|
|
133
|
+
| 8 | `tty` | **required (library)** |
|
|
134
|
+
| 1 | `beartype` | **optional** |
|
|
135
|
+
| 2 | `prompt_toolkit` | **optional** |
|
|
136
|
+
| 3 | `pygments` | **optional** |
|
|
137
|
+
| 4 | `readline` | **optional** |
|
|
138
|
+
| 5 | `tkinter` | **optional** |
|
|
139
|
+
| 6 | `IPython` | **optional** |
|
|
140
|
+
|
|
141
|
+
### Status Explanation
|
|
142
|
+
- **required**: Required by PyScript entirely.
|
|
143
|
+
- **required (library)**: Required PyScript library (located in `pyscript/lib`). PyScript is not affected unless you
|
|
144
|
+
import it.
|
|
145
|
+
- **optional**: Not required, but if it is present, some features can be used without issue.
|
|
146
|
+
|
|
147
|
+
## Highlights
|
|
148
|
+
- [PyScript plugin for Acode](https://acode.app/plugin/acode.plugin.pyscript)
|
|
149
|
+
- [PyScript nano for Linux](https://github.com/azzammuhyala/pyscript/tree/main/highlight/nano)
|
|
150
|
+
- [PyScript extension for VSCode](https://marketplace.visualstudio.com/items?itemName=azzammuhyala.pyslang)
|
|
151
|
+
|
|
152
|
+
## Behind it 🕰️
|
|
153
|
+
This language created from based up on a
|
|
154
|
+
[YouTube tutorial](https://www.youtube.com/playlist?list=PLZQftyCk7_SdoVexSmwy_tBgs7P0b97yD) (check more on GitHub
|
|
155
|
+
[here](https://github.com/davidcallanan/py-myopl-code) by **@davidcallanan**). At least, it takes about 6 months to
|
|
156
|
+
learn it, and also need to learn general things that exist in other programming languages.
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# PyScript
|
|
2
|
+
|
|
3
|
+
<div align="center">
|
|
4
|
+
<img src="https://github.com/azzammuhyala/pyscript/blob/main/PyScript.png?raw=true" alt="PyScript Logo" width="200">
|
|
5
|
+
<br>
|
|
6
|
+
<a href="https://pepy.tech/project/pyscript-programming-language">
|
|
7
|
+
<img src="https://static.pepy.tech/personalized-badge/pyscript-programming-language?period=total&units=NONE&left_color=GRAY&right_color=GREEN&left_text=downloads" alt="PyPI Downloads">
|
|
8
|
+
</a>
|
|
9
|
+
<a href="https://en.wikipedia.org/wiki/MIT_License">
|
|
10
|
+
<img src="https://img.shields.io/badge/license-MIT-orange" alt="License MIT">
|
|
11
|
+
</a>
|
|
12
|
+
<a href="https://www.python.org/">
|
|
13
|
+
<img src="https://img.shields.io/badge/python-3.10-yellow" alt="Python 3.10+">
|
|
14
|
+
</a>
|
|
15
|
+
</div>
|
|
16
|
+
|
|
17
|
+
PyScript is a programming language built on top of Python. It combines some syntax from Python and JavaScript, so if
|
|
18
|
+
you're already familiar with Python, JavaScript or both, it should be quite easy to learn.
|
|
19
|
+
|
|
20
|
+
## Introduction 📖
|
|
21
|
+
PyScript may not be the language we'll be discussing, but the name PyScript already exists, a flexible and platform for
|
|
22
|
+
running Python in a browser. Since it's inception, the language was inspired by Python and JavaScript, which are
|
|
23
|
+
relatively easy for humans to read. This name was chosen because it wasn't immediately known whether this name was
|
|
24
|
+
already in use.
|
|
25
|
+
|
|
26
|
+
This language wasn't designed to compete with other modern programming languages, but rather as a learning for
|
|
27
|
+
understanding how programming languages work and how human written code can be understood by machines. Furthermore, this
|
|
28
|
+
language was created as a relatively complex project. Using Python as the foundation for PyScript, it's easy to
|
|
29
|
+
understand how the language is built without having to understand complex instructions like those in C, C++, and other
|
|
30
|
+
low-level languages.
|
|
31
|
+
|
|
32
|
+
To learn more about PyScript, you can see on [PyScript documentation](https://azzammuhyala.github.io/pyscript) or
|
|
33
|
+
[PyScript repository](https://github.com/azzammuhyala/pyscript) for full source code.
|
|
34
|
+
|
|
35
|
+
## Try PyScript ▶️
|
|
36
|
+
Try [PyScript Shell (_REPL_)](https://azzammuhyala.github.io/pyscript/shell.html) inside your browser directly
|
|
37
|
+
(no installation required).
|
|
38
|
+
|
|
39
|
+
## Installation ⬇️
|
|
40
|
+
First, you'll need to download Python. Make sure you're using the latest version above `3.10`, to ensure the code runs
|
|
41
|
+
correctly. Visit the official [Python website](https://python.org) to download it.
|
|
42
|
+
|
|
43
|
+
Next, after downloading and configuring the Python application, you can download the PyScript from
|
|
44
|
+
[PyScript releases](https://github.com/azzammuhyala/pyscript/releases) or from PIP with this command (_Recommended_):
|
|
45
|
+
```sh
|
|
46
|
+
pip install -U pyscript-programming-language
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
[_OPTIONAL_] You can download additional libraries that PyScript requires with this command:
|
|
50
|
+
```sh
|
|
51
|
+
pip install -U pyscript-programming-language[other]
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
And also, you can download PyScript with `git`:
|
|
55
|
+
```sh
|
|
56
|
+
git clone https://github.com/azzammuhyala/pyscript
|
|
57
|
+
cd pyscript
|
|
58
|
+
pip install .
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
After that, you can run the PyScript shell (_REPL_) with this command:
|
|
62
|
+
```sh
|
|
63
|
+
python -m pyscript
|
|
64
|
+
```
|
|
65
|
+
If successful, you can see the version, release date, and a `>>>` like Python shell (_REPL_).
|
|
66
|
+
|
|
67
|
+
## Example 📜
|
|
68
|
+
Familiar? There it is!
|
|
69
|
+
<pre><span style="color:#549952"># get a number and operator with input()</span><span style="color:#D4D4D4"><br></span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4"> = </span><span style="color:#4EC9B0">float</span><span style="color:#FFD705">(</span><span style="color:#DCDCAA">input</span><span style="color:#D45DBA">(</span><span style="color:#CE9178">"Enter a first number : "</span><span style="color:#D45DBA">)</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"><br></span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4"> = </span><span style="color:#4EC9B0">float</span><span style="color:#FFD705">(</span><span style="color:#DCDCAA">input</span><span style="color:#D45DBA">(</span><span style="color:#CE9178">"Enter a second number: "</span><span style="color:#D45DBA">)</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"><br></span><span style="color:#8CDCFE">operation</span><span style="color:#D4D4D4"> = </span><span style="color:#DCDCAA">input</span><span style="color:#FFD705">(</span><span style="color:#CE9178">"Enter an operation (+, -, *, /): "</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"><br><br></span><span style="color:#549952"># define a functions</span><span style="color:#D4D4D4"><br></span><span style="color:#307CD6">func</span><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">add</span><span style="color:#FFD705">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"> </span><span style="color:#FFD705">{</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">return</span><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4"> + </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4"><br></span><span style="color:#FFD705">}</span><span style="color:#D4D4D4"><br><br></span><span style="color:#307CD6">func</span><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">sub</span><span style="color:#FFD705">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"> </span><span style="color:#FFD705">{</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">return</span><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4"> - </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4"><br></span><span style="color:#FFD705">}</span><span style="color:#D4D4D4"><br><br></span><span style="color:#307CD6">func</span><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">mul</span><span style="color:#FFD705">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"> </span><span style="color:#FFD705">{</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">return</span><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4"> * </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4"><br></span><span style="color:#FFD705">}</span><span style="color:#D4D4D4"><br><br></span><span style="color:#307CD6">func</span><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">floordiv</span><span style="color:#FFD705">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"> </span><span style="color:#FFD705">{</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#549952"># check b is zero</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">return</span><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4"> != </span><span style="color:#B5CEA8">0</span><span style="color:#D4D4D4"> ? </span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4"> / </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4"> : </span><span style="color:#307CD6">none</span><span style="color:#D4D4D4"><br></span><span style="color:#FFD705">}</span><span style="color:#D4D4D4"><br><br></span><span style="color:#549952"># operation matching</span><span style="color:#D4D4D4"><br></span><span style="color:#C586C0">switch</span><span style="color:#D4D4D4"> </span><span style="color:#FFD705">(</span><span style="color:#8CDCFE">operation</span><span style="color:#D4D4D4">.</span><span style="color:#DCDCAA">strip</span><span style="color:#D45DBA">()</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"><br></span><span style="color:#FFD705">{</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">case</span><span style="color:#D4D4D4"> </span><span style="color:#CE9178">'+'</span><span style="color:#D4D4D4">:</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">result</span><span style="color:#D4D4D4"> = </span><span style="color:#DCDCAA">add</span><span style="color:#D45DBA">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#D45DBA">)</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">print</span><span style="color:#D45DBA">(</span><span style="color:#CE9178">"Result of {:,} + {:,} = {:,}"</span><span style="color:#D4D4D4">.</span><span style="color:#DCDCAA">format</span><span style="color:#1A9FFF">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">result</span><span style="color:#1A9FFF">)</span><span style="color:#D45DBA">)</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">break</span><span style="color:#D4D4D4"><br><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">case</span><span style="color:#D4D4D4"> </span><span style="color:#CE9178">'-'</span><span style="color:#D4D4D4">:</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">result</span><span style="color:#D4D4D4"> = </span><span style="color:#DCDCAA">sub</span><span style="color:#D45DBA">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#D45DBA">)</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">print</span><span style="color:#D45DBA">(</span><span style="color:#CE9178">"Result of {:,} - {:,} = {:,}"</span><span style="color:#D4D4D4">.</span><span style="color:#DCDCAA">format</span><span style="color:#1A9FFF">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">result</span><span style="color:#1A9FFF">)</span><span style="color:#D45DBA">)</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">break</span><span style="color:#D4D4D4"><br><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">case</span><span style="color:#D4D4D4"> </span><span style="color:#CE9178">'*'</span><span style="color:#D4D4D4">:</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">result</span><span style="color:#D4D4D4"> = </span><span style="color:#DCDCAA">mul</span><span style="color:#D45DBA">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#D45DBA">)</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">print</span><span style="color:#D45DBA">(</span><span style="color:#CE9178">"Result of {:,} * {:,} = {:,}"</span><span style="color:#D4D4D4">.</span><span style="color:#DCDCAA">format</span><span style="color:#1A9FFF">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">result</span><span style="color:#1A9FFF">)</span><span style="color:#D45DBA">)</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">break</span><span style="color:#D4D4D4"><br><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">case</span><span style="color:#D4D4D4"> </span><span style="color:#CE9178">'/'</span><span style="color:#D4D4D4">:</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">result</span><span style="color:#D4D4D4"> = </span><span style="color:#DCDCAA">floordiv</span><span style="color:#D45DBA">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#D45DBA">)</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">print</span><span style="color:#D45DBA">(</span><span style="color:#CE9178">"Result of {:,} / {:,} = {}"</span><span style="color:#D4D4D4">.</span><span style="color:#DCDCAA">format</span><span style="color:#1A9FFF">(</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4">,</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">result</span><span style="color:#D4D4D4"> </span><span style="color:#307CD6">is</span><span style="color:#D4D4D4"> </span><span style="color:#307CD6">not</span><span style="color:#D4D4D4"> </span><span style="color:#307CD6">none</span><span style="color:#D4D4D4"> ? </span><span style="color:#DCDCAA">format</span><span style="color:#FFD705">(</span><span style="color:#8CDCFE">result</span><span style="color:#D4D4D4">, </span><span style="color:#CE9178">','</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"> : </span><span style="color:#CE9178">"Cannot be divided by 0"</span><span style="color:#1A9FFF">)</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#D45DBA">)</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">break</span><span style="color:#D4D4D4"><br><br></span><span style="color:#D4D4D4"> </span><span style="color:#C586C0">default</span><span style="color:#D4D4D4">:</span><span style="color:#D4D4D4"><br></span><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">print</span><span style="color:#D45DBA">(</span><span style="color:#CE9178">"Unknown operation"</span><span style="color:#D45DBA">)</span><span style="color:#D4D4D4"><br></span><span style="color:#FFD705">}</span></pre>
|
|
70
|
+
|
|
71
|
+
## Library Requirements 📓
|
|
72
|
+
| No | Name | Status |
|
|
73
|
+
|:--:|:------------------|:----------------------:|
|
|
74
|
+
| 1 | `argparse` | **required** |
|
|
75
|
+
| 2 | `builtins` | **required** |
|
|
76
|
+
| 3 | `collections.abc` | **required** |
|
|
77
|
+
| 4 | `functools` | **required** |
|
|
78
|
+
| 5 | `html` | **required** |
|
|
79
|
+
| 6 | `importlib` | **required** |
|
|
80
|
+
| 7 | `inspect` | **required** |
|
|
81
|
+
| 8 | `io` | **required** |
|
|
82
|
+
| 9 | `itertools` | **required** |
|
|
83
|
+
| 10 | `json` | **required** |
|
|
84
|
+
| 11 | `math` | **required** |
|
|
85
|
+
| 12 | `operator` | **required** |
|
|
86
|
+
| 13 | `os` | **required** |
|
|
87
|
+
| 14 | `re` | **required** |
|
|
88
|
+
| 15 | `subprocess` | **required** |
|
|
89
|
+
| 16 | `sys` | **required** |
|
|
90
|
+
| 17 | `threading` | **required** |
|
|
91
|
+
| 18 | `types` | **required** |
|
|
92
|
+
| 19 | `typing` | **required** |
|
|
93
|
+
| 20 | `unicodedata` | **required** |
|
|
94
|
+
| 1 | `ast` | **required (library)** |
|
|
95
|
+
| 2 | `msvcrt` | **required (library)** |
|
|
96
|
+
| 3 | `pprint` | **required (library)** |
|
|
97
|
+
| 4 | `shutil` | **required (library)** |
|
|
98
|
+
| 5 | `stat` | **required (library)** |
|
|
99
|
+
| 6 | `termios` | **required (library)** |
|
|
100
|
+
| 7 | `time` | **required (library)** |
|
|
101
|
+
| 8 | `tty` | **required (library)** |
|
|
102
|
+
| 1 | `beartype` | **optional** |
|
|
103
|
+
| 2 | `prompt_toolkit` | **optional** |
|
|
104
|
+
| 3 | `pygments` | **optional** |
|
|
105
|
+
| 4 | `readline` | **optional** |
|
|
106
|
+
| 5 | `tkinter` | **optional** |
|
|
107
|
+
| 6 | `IPython` | **optional** |
|
|
108
|
+
|
|
109
|
+
### Status Explanation
|
|
110
|
+
- **required**: Required by PyScript entirely.
|
|
111
|
+
- **required (library)**: Required PyScript library (located in `pyscript/lib`). PyScript is not affected unless you
|
|
112
|
+
import it.
|
|
113
|
+
- **optional**: Not required, but if it is present, some features can be used without issue.
|
|
114
|
+
|
|
115
|
+
## Highlights
|
|
116
|
+
- [PyScript plugin for Acode](https://acode.app/plugin/acode.plugin.pyscript)
|
|
117
|
+
- [PyScript nano for Linux](https://github.com/azzammuhyala/pyscript/tree/main/highlight/nano)
|
|
118
|
+
- [PyScript extension for VSCode](https://marketplace.visualstudio.com/items?itemName=azzammuhyala.pyslang)
|
|
119
|
+
|
|
120
|
+
## Behind it 🕰️
|
|
121
|
+
This language created from based up on a
|
|
122
|
+
[YouTube tutorial](https://www.youtube.com/playlist?list=PLZQftyCk7_SdoVexSmwy_tBgs7P0b97yD) (check more on GitHub
|
|
123
|
+
[here](https://github.com/davidcallanan/py-myopl-code) by **@davidcallanan**). At least, it takes about 6 months to
|
|
124
|
+
learn it, and also need to learn general things that exist in other programming languages.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Change Logs
|
|
2
|
+
|
|
3
|
+
## [1.13.0] - 14/05/2026
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
- The `else` keyword is used in `match` as an alias for the `default` keyword.
|
|
7
|
+
- The `pyscript.core.pystypes.PysPythonFunction` passes two parameters, `context` and `position`, instead of passing one
|
|
8
|
+
parameter to itself.
|
|
9
|
+
- In the symbol table object, `__builtins__` has its own namespace named `builtins`.
|
|
10
|
+
- Direct deletion of the global namespace with the `/clean` command. This allows the _Python Garbage Collector_ to
|
|
11
|
+
immediately delete all objects in that namespace.
|
|
12
|
+
- A single statement will directly provide that single node instead of providing a
|
|
13
|
+
`pyscript.core.nodes.PysStatementsNode`.
|
|
14
|
+
- A new mechanism for getting built-in module import functions in `import` and `from` statements.
|
|
15
|
+
- The keywords `in`, `is`, `and`, `or`, `not`, and `typeof` are not available in `PysToken` (new token types).
|
|
16
|
+
- The `instanceof` keyword (same as the built-in `isinstance()` function).
|
|
17
|
+
- _etc._
|
|
18
|
+
|
|
19
|
+
### Fixed
|
|
20
|
+
- Add word boundary `'\b'` to number regex.
|
|
21
|
+
- Add of information in the parser in the form of rows and columns.
|
|
22
|
+
- Fixed some bugs.
|
|
23
|
+
- _etc._
|
|
24
|
+
|
|
25
|
+
### Deleted
|
|
26
|
+
- `pyscript.core.mapping.EMPTY_MAP`.
|
|
27
|
+
- _etc._
|
{pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyproject.toml
RENAMED
|
@@ -4,14 +4,14 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "pyscript-programming-language"
|
|
7
|
-
version = "1.
|
|
7
|
+
version = "1.13.0"
|
|
8
8
|
description = "PyScript Programming Language"
|
|
9
9
|
readme = { file = "README.md", content-type = "text/markdown" }
|
|
10
10
|
requires-python = ">=3.10"
|
|
11
11
|
license = "MIT"
|
|
12
12
|
|
|
13
13
|
authors = [
|
|
14
|
-
{ name = "
|
|
14
|
+
{ name = "Azzam Muhyala", email = "azzammuhyala@gmail.com" }
|
|
15
15
|
]
|
|
16
16
|
|
|
17
17
|
keywords = [
|
|
@@ -22,13 +22,14 @@ ENV_PYSCRIPT_MAXIMUM_HISTORY_LINE = 'PYSCRIPT_MAXIMUM_HISTORY_LINE'
|
|
|
22
22
|
KEYWORDS = (
|
|
23
23
|
'__debug__', 'False', 'None', 'True', 'and', 'as', 'assert', 'break', 'case', 'catch', 'class', 'constructor',
|
|
24
24
|
'continue', 'default', 'del', 'delete', 'do', 'elif', 'else', 'elseif', 'except', 'extends', 'false', 'finally',
|
|
25
|
-
'for', 'from', 'func', 'function', 'global', 'if', 'import', 'in', 'is', 'match', 'nil', 'none',
|
|
26
|
-
'true', 'typeof', 'of', 'or', 'raise', 'repeat', 'return', 'switch', 'throw', 'try', 'until',
|
|
25
|
+
'for', 'from', 'func', 'function', 'global', 'if', 'import', 'in', 'instanceof', 'is', 'match', 'nil', 'none',
|
|
26
|
+
'null', 'not', 'true', 'typeof', 'of', 'or', 'raise', 'repeat', 'return', 'switch', 'throw', 'try', 'until',
|
|
27
|
+
'while', 'with'
|
|
27
28
|
)
|
|
28
29
|
|
|
29
30
|
CONSTANT_KEYWORDS = (
|
|
30
31
|
'__debug__', 'False', 'None', 'True', 'and', 'class', 'constructor', 'extends', 'func', 'function', 'false',
|
|
31
|
-
'global', 'in', 'is', 'not', 'nil', 'none', 'null', 'of', 'or', 'true', 'typeof'
|
|
32
|
+
'global', 'in', 'instanceof', 'is', 'not', 'nil', 'none', 'null', 'of', 'or', 'true', 'typeof'
|
|
32
33
|
)
|
|
33
34
|
|
|
34
35
|
DEFAULT = 0
|
|
@@ -143,7 +143,7 @@ try:
|
|
|
143
143
|
name = 'pyscript'
|
|
144
144
|
url = 'https://azzammuhyala.github.io/pyscript'
|
|
145
145
|
aliases = ['pyscript', 'pyslang', 'pyscript-programming-language']
|
|
146
|
-
filenames = ['*.pys'
|
|
146
|
+
filenames = ['*.pys']
|
|
147
147
|
|
|
148
148
|
tokens = {
|
|
149
149
|
|
|
@@ -192,27 +192,27 @@ try:
|
|
|
192
192
|
|
|
193
193
|
# Numbers
|
|
194
194
|
(
|
|
195
|
-
rf'(0[bB])([01](?:_?[01])*)({_imaginary})',
|
|
195
|
+
rf'\b(0[bB])([01](?:_?[01])*)({_imaginary})\b',
|
|
196
196
|
bygroups(Number.Affix, Number.Bin, Number.Affix)
|
|
197
197
|
),
|
|
198
198
|
(
|
|
199
|
-
rf'(0[oO])([0-7](?:_?[0-7])*)({_imaginary})',
|
|
199
|
+
rf'\b(0[oO])([0-7](?:_?[0-7])*)({_imaginary})\b',
|
|
200
200
|
bygroups(Number.Affix, Number.Oct, Number.Affix)
|
|
201
201
|
),
|
|
202
202
|
(
|
|
203
|
-
rf'(0[xX])([0-9a-fA-F](?:_?[0-9a-fA-F])*)({_imaginary})',
|
|
203
|
+
rf'\b(0[xX])([0-9a-fA-F](?:_?[0-9a-fA-F])*)({_imaginary})\b',
|
|
204
204
|
bygroups(Number.Affix, Number.Hex, Number.Affix)
|
|
205
205
|
),
|
|
206
206
|
(
|
|
207
|
-
rf'((?:(?:{_integer})?\.{_integer}|{_integer}\.){_scientific}?)({_imaginary})',
|
|
207
|
+
rf'\b((?:(?:{_integer})?\.{_integer}|{_integer}\.){_scientific}?)({_imaginary})\b',
|
|
208
208
|
bygroups(Number.Float, Number.Affix)
|
|
209
209
|
),
|
|
210
210
|
(
|
|
211
|
-
rf'({_integer}{_scientific})({_imaginary})',
|
|
211
|
+
rf'\b({_integer}{_scientific})({_imaginary})\b',
|
|
212
212
|
bygroups(Number.Float, Number.Affix)
|
|
213
213
|
),
|
|
214
214
|
(
|
|
215
|
-
rf'({_integer})({_imaginary})',
|
|
215
|
+
rf'\b({_integer})({_imaginary})\b',
|
|
216
216
|
bygroups(Number.Integer, Number.Affix)
|
|
217
217
|
),
|
|
218
218
|
|
|
@@ -281,8 +281,7 @@ try:
|
|
|
281
281
|
],
|
|
282
282
|
|
|
283
283
|
'raw-string-escapes': [
|
|
284
|
-
(rf'\\([\'"]|{_newlines})', String)
|
|
285
|
-
(r'\\.', String)
|
|
284
|
+
(rf'\\([\'"\\]|{_newlines})', String)
|
|
286
285
|
],
|
|
287
286
|
|
|
288
287
|
'raw-string-apostrophe-triple': [
|
|
@@ -14,15 +14,13 @@ from .results import PysRunTimeResult
|
|
|
14
14
|
from .symtab import PysClassSymbolTable, find_closest
|
|
15
15
|
from .token import TOKENS
|
|
16
16
|
from .utils.debug import get_traceback_info
|
|
17
|
-
from .utils.generic import getattribute, setimuattr, dkeys, is_object_of
|
|
17
|
+
from .utils.generic import getattribute, setimuattr, dget, dkeys, is_object_of
|
|
18
18
|
from .utils.similarity import get_closest
|
|
19
19
|
|
|
20
20
|
from collections.abc import Iterable
|
|
21
21
|
from typing import Any, Callable
|
|
22
22
|
|
|
23
|
-
T_KEYWORD = TOKENS['KEYWORD']
|
|
24
23
|
T_STRING = TOKENS['STRING']
|
|
25
|
-
T_NOT = TOKENS['EXCLAMATION']
|
|
26
24
|
T_AND = TOKENS['DOUBLE_AMPERSAND']
|
|
27
25
|
T_NULLISH = TOKENS['DOUBLE_QUESTION']
|
|
28
26
|
T_OR = TOKENS['DOUBLE_PIPE']
|
|
@@ -270,13 +268,7 @@ def visit_ChainOperatorNode(node: PysChainOperatorNode, context: PysContext) ->
|
|
|
270
268
|
if should_return():
|
|
271
269
|
return result
|
|
272
270
|
|
|
273
|
-
if otype ==
|
|
274
|
-
ovalue = toperand.value
|
|
275
|
-
if ovalue == 'in':
|
|
276
|
-
value = left in right
|
|
277
|
-
elif ovalue == 'is':
|
|
278
|
-
value = left is right
|
|
279
|
-
elif otype == T_CE:
|
|
271
|
+
if otype == T_CE:
|
|
280
272
|
handle_call(ce, context, nposition)
|
|
281
273
|
value = ce(left, right)
|
|
282
274
|
elif otype == T_NCE:
|
|
@@ -337,13 +329,7 @@ def visit_BinaryOperatorNode(node: PysBinaryOperatorNode, context: PysContext) -
|
|
|
337
329
|
with result:
|
|
338
330
|
return_right = True
|
|
339
331
|
|
|
340
|
-
if otype ==
|
|
341
|
-
ovalue = toperand.value
|
|
342
|
-
if ovalue == 'and':
|
|
343
|
-
if not left: return result.success(left)
|
|
344
|
-
elif ovalue == 'or':
|
|
345
|
-
if left: return result.success(left)
|
|
346
|
-
elif otype == T_AND:
|
|
332
|
+
if otype == T_AND:
|
|
347
333
|
if not left: return result.success(left)
|
|
348
334
|
elif otype == T_OR:
|
|
349
335
|
if left: return result.success(left)
|
|
@@ -377,14 +363,6 @@ def visit_UnaryOperatorNode(node: PysUnaryOperatorNode, context: PysContext) ->
|
|
|
377
363
|
result._context = context
|
|
378
364
|
result._position = node.position
|
|
379
365
|
with result:
|
|
380
|
-
|
|
381
|
-
if otype == T_KEYWORD:
|
|
382
|
-
ovalue = toperand.value
|
|
383
|
-
if ovalue == 'not':
|
|
384
|
-
return result.success(not value)
|
|
385
|
-
elif ovalue == 'typeof':
|
|
386
|
-
return result.success(type(value).__name__)
|
|
387
|
-
|
|
388
366
|
return result.success(GET_UNARY_FUNCTION(otype)(value))
|
|
389
367
|
|
|
390
368
|
return result
|
|
@@ -423,17 +401,8 @@ def visit_StatementsNode(node: PysStatementsNode, context: PysContext) -> PysRun
|
|
|
423
401
|
|
|
424
402
|
register = result.register
|
|
425
403
|
should_return = result.should_return
|
|
426
|
-
body = node.body
|
|
427
404
|
|
|
428
|
-
|
|
429
|
-
nvalue = body[0]
|
|
430
|
-
value = register(get_visitor(nvalue.__class__)(nvalue, context))
|
|
431
|
-
if should_return():
|
|
432
|
-
return result
|
|
433
|
-
|
|
434
|
-
return result.success(value)
|
|
435
|
-
|
|
436
|
-
for nelement in body:
|
|
405
|
+
for nelement in node.body:
|
|
437
406
|
register(get_visitor(nelement.__class__)(nelement, context))
|
|
438
407
|
if should_return():
|
|
439
408
|
return result
|
|
@@ -461,16 +430,25 @@ def visit_ImportNode(node: PysImportNode, context: PysContext) -> PysRunTimeResu
|
|
|
461
430
|
result = PysRunTimeResult()
|
|
462
431
|
|
|
463
432
|
symbol_table = context.symbol_table
|
|
464
|
-
get_symbol = symbol_table.get
|
|
465
433
|
tname, tas_name = node.name
|
|
466
434
|
|
|
435
|
+
b_getattr = getattr
|
|
436
|
+
|
|
437
|
+
symtab = symbol_table
|
|
438
|
+
parent = symbol_table.parent
|
|
439
|
+
while parent:
|
|
440
|
+
symtab = parent
|
|
441
|
+
parent = parent.parent
|
|
442
|
+
builtins = b_getattr(symtab, 'builtins', undefined)
|
|
443
|
+
get_builtin = lambda name : undefined if builtins is undefined else dget(builtins, name, undefined)
|
|
444
|
+
|
|
467
445
|
result._context = context
|
|
468
446
|
result._position = name_position = tname.position
|
|
469
447
|
with result:
|
|
470
448
|
name_module = tname.value
|
|
471
449
|
use_python_package = False
|
|
472
450
|
|
|
473
|
-
require =
|
|
451
|
+
require = get_builtin('require')
|
|
474
452
|
|
|
475
453
|
if require is undefined:
|
|
476
454
|
use_python_package = True
|
|
@@ -482,10 +460,10 @@ def visit_ImportNode(node: PysImportNode, context: PysContext) -> PysRunTimeResu
|
|
|
482
460
|
use_python_package = True
|
|
483
461
|
|
|
484
462
|
if use_python_package:
|
|
485
|
-
pyimport =
|
|
463
|
+
pyimport = get_builtin('pyimport')
|
|
486
464
|
|
|
487
465
|
if pyimport is undefined:
|
|
488
|
-
pyimport =
|
|
466
|
+
pyimport = get_builtin('__import__')
|
|
489
467
|
|
|
490
468
|
if pyimport is undefined:
|
|
491
469
|
return result.failure(
|
|
@@ -510,13 +488,12 @@ def visit_ImportNode(node: PysImportNode, context: PysContext) -> PysRunTimeResu
|
|
|
510
488
|
|
|
511
489
|
with result:
|
|
512
490
|
exported_from = '__all__'
|
|
513
|
-
exported_packages =
|
|
491
|
+
exported_packages = b_getattr(module, exported_from, undefined)
|
|
514
492
|
if exported_packages is undefined:
|
|
515
493
|
exported_from = '__dir__()'
|
|
516
494
|
exported_packages = filter(is_public_attribute, dir(module))
|
|
517
495
|
|
|
518
496
|
b_isinstance = isinstance
|
|
519
|
-
b_getattr = getattr
|
|
520
497
|
b_str = str
|
|
521
498
|
|
|
522
499
|
for package in exported_packages:
|
|
@@ -538,7 +515,6 @@ def visit_ImportNode(node: PysImportNode, context: PysContext) -> PysRunTimeResu
|
|
|
538
515
|
return result
|
|
539
516
|
|
|
540
517
|
elif npackages:
|
|
541
|
-
b_getattr = getattr
|
|
542
518
|
|
|
543
519
|
for tpackage, tas_package in npackages:
|
|
544
520
|
result._position = tpackage.position
|