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.
Files changed (91) hide show
  1. pyscript_programming_language-1.13.0/PKG-INFO +156 -0
  2. pyscript_programming_language-1.13.0/README.md +124 -0
  3. pyscript_programming_language-1.13.0/changelog.md +27 -0
  4. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyproject.toml +2 -2
  5. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/cache.py +1 -0
  6. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/constants.py +4 -3
  7. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/highlight.py +8 -9
  8. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/interpreter.py +18 -42
  9. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/lexer.py +1 -3
  10. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/mapping.py +12 -9
  11. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/parser.py +57 -20
  12. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/position.py +8 -7
  13. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/pysbuiltins.py +53 -87
  14. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/pystypes.py +6 -2
  15. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/runner.py +21 -14
  16. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/shell.py +1 -1
  17. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/symtab.py +30 -27
  18. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/token.py +12 -8
  19. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/utils/debug.py +1 -2
  20. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/utils/generic.py +1 -0
  21. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/utils/string.py +3 -3
  22. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/version.py +3 -3
  23. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/lib/ast/ast_literal_eval.py +14 -5
  24. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/lib/ast/ast_unparse.py +3 -19
  25. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/lib/inspect.pys +2 -2
  26. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/lib/parser.pys +16 -3
  27. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/lib/site.pys +3 -0
  28. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/lib/tokenize/__init__.pys +1 -1
  29. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/lib/tokenize/tok_untokenize.py +2 -2
  30. pyscript_programming_language-1.13.0/pyscript_programming_language.egg-info/PKG-INFO +156 -0
  31. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/setup.py +2 -2
  32. pyscript_programming_language-1.12.13/PKG-INFO +0 -150
  33. pyscript_programming_language-1.12.13/README.md +0 -118
  34. pyscript_programming_language-1.12.13/changelog.md +0 -11
  35. pyscript_programming_language-1.12.13/pyscript_programming_language.egg-info/PKG-INFO +0 -150
  36. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/MANIFEST.in +0 -0
  37. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/__init__.py +0 -0
  38. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/__init__.pyi +0 -0
  39. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/__main__.py +0 -0
  40. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/__init__.py +0 -0
  41. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/analyzer.py +0 -0
  42. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/bases.py +0 -0
  43. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/buffer.py +0 -0
  44. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/checks.py +0 -0
  45. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/context.py +0 -0
  46. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/editor/__init__.py +0 -0
  47. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/editor/bases.py +0 -0
  48. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/editor/gui.py +0 -0
  49. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/editor/terminal.py +0 -0
  50. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/exceptions.py +0 -0
  51. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/handlers.py +0 -0
  52. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/nodes.py +0 -0
  53. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/results.py +0 -0
  54. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/utils/__init__.py +0 -0
  55. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/utils/ansi.py +0 -0
  56. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/utils/decorators.py +0 -0
  57. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/utils/module.py +0 -0
  58. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/utils/path.py +0 -0
  59. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/core/utils/similarity.py +0 -0
  60. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/lib/__hello__.pys +0 -0
  61. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/lib/ansi.pys +0 -0
  62. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/lib/ast/__init__.pys +0 -0
  63. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/lib/ast/ast_dump.py +0 -0
  64. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/lib/ast/ast_walk.py +0 -0
  65. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/lib/brainfuck.pys +0 -0
  66. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/lib/code.pys +0 -0
  67. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/lib/dis.pys +0 -0
  68. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/lib/explorer.pys +0 -0
  69. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/lib/fpstimer/__init__.pys +0 -0
  70. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/lib/fpstimer/py_fpstimer.py +0 -0
  71. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/lib/getch/__init__.pys +0 -0
  72. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/lib/getch/py_getch.py +0 -0
  73. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/lib/history.pys +0 -0
  74. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/lib/jsdict.pys +0 -0
  75. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/lib/keyword.pys +0 -0
  76. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/lib/opcode.pys +0 -0
  77. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/lib/pdisplay.pys +0 -0
  78. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/lib/symtable.pys +0 -0
  79. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/lib/token.pys +0 -0
  80. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/other/.nomedia +0 -0
  81. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/other/PyScript.ico +0 -0
  82. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/other/copyright +0 -0
  83. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/other/credits +0 -0
  84. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/other/license +0 -0
  85. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/site-packages/this.pys +0 -0
  86. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript/this.py +0 -0
  87. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript_programming_language.egg-info/SOURCES.txt +0 -0
  88. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript_programming_language.egg-info/dependency_links.txt +0 -0
  89. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript_programming_language.egg-info/requires.txt +0 -0
  90. {pyscript_programming_language-1.12.13 → pyscript_programming_language-1.13.0}/pyscript_programming_language.egg-info/top_level.txt +0 -0
  91. {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">&quot;Enter a first number : &quot;</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">&quot;Enter a second number: &quot;</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">&quot;Enter an operation (+, -, *, /): &quot;</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">&#x27;+&#x27;</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">&quot;Result of {:,} + {:,} = {:,}&quot;</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">&#x27;-&#x27;</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">&quot;Result of {:,} - {:,} = {:,}&quot;</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">&#x27;*&#x27;</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">&quot;Result of {:,} * {:,} = {:,}&quot;</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">&#x27;/&#x27;</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">&quot;Result of {:,} / {:,} = {}&quot;</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">&#x27;,&#x27;</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"> : </span><span style="color:#CE9178">&quot;Cannot be divided by 0&quot;</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">&quot;Unknown operation&quot;</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">&quot;Enter a first number : &quot;</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">&quot;Enter a second number: &quot;</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">&quot;Enter an operation (+, -, *, /): &quot;</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">&#x27;+&#x27;</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">&quot;Result of {:,} + {:,} = {:,}&quot;</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">&#x27;-&#x27;</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">&quot;Result of {:,} - {:,} = {:,}&quot;</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">&#x27;*&#x27;</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">&quot;Result of {:,} * {:,} = {:,}&quot;</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">&#x27;/&#x27;</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">&quot;Result of {:,} / {:,} = {}&quot;</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">&#x27;,&#x27;</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"> : </span><span style="color:#CE9178">&quot;Cannot be divided by 0&quot;</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">&quot;Unknown operation&quot;</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._
@@ -4,14 +4,14 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "pyscript-programming-language"
7
- version = "1.12.13"
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 = "azzammuhyala", email = "azzammuhyala@gmail.com" }
14
+ { name = "Azzam Muhyala", email = "azzammuhyala@gmail.com" }
15
15
  ]
16
16
 
17
17
  keywords = [
@@ -45,6 +45,7 @@ for name in (
45
45
  if hasattr(sys, name):
46
46
  setattr(pys_sys, name, getattr(sys, name))
47
47
 
48
+ # sentinel
48
49
  @singleton
49
50
  @inheritable
50
51
  class PysUndefined(Pys):
@@ -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', 'null', 'not',
26
- 'true', 'typeof', 'of', 'or', 'raise', 'repeat', 'return', 'switch', 'throw', 'try', 'until', 'while', 'with'
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', '.pyscript_history']
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 == T_KEYWORD:
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 == T_KEYWORD:
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
- if len(body) == 1:
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 = get_symbol('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 = get_symbol('pyimport')
463
+ pyimport = get_builtin('pyimport')
486
464
 
487
465
  if pyimport is undefined:
488
- pyimport = get_symbol('__import__')
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 = getattr(module, exported_from, undefined)
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