pyscript-programming-language 1.10.3__tar.gz → 1.11.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.11.0/PKG-INFO +100 -0
- pyscript_programming_language-1.11.0/README.md +65 -0
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/__init__.py +2 -1
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/__init__.pyi +13 -2
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/__main__.py +39 -37
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/__init__.py +2 -0
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/analyzer.py +8 -8
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/cache.py +1 -1
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/checks.py +2 -3
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/constants.py +9 -57
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/context.py +1 -1
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/exceptions.py +5 -7
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/highlight.py +63 -94
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/interpreter.py +65 -66
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/lexer.py +12 -12
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/mapping.py +17 -17
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/objects.py +8 -21
- pyscript_programming_language-1.11.0/pyscript/core/other/copyright +2 -0
- pyscript_programming_language-1.11.0/pyscript/core/other/credits +2 -0
- pyscript_programming_language-1.11.0/pyscript/core/other/license +21 -0
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/parser.py +153 -149
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/position.py +7 -5
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/pysbuiltins.py +38 -24
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/results.py +4 -0
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/runner.py +59 -31
- {pyscript_programming_language-1.10.3/pyscript/core/utils → pyscript_programming_language-1.11.0/pyscript/core}/shell.py +32 -18
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/symtab.py +2 -4
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/token.py +2 -5
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/utils/__init__.py +0 -2
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/version.py +2 -2
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/lib/ast/ast_literal_eval.py +6 -6
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/lib/ast/ast_unparse.py +80 -124
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/lib/brainfuck.pys +1 -1
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/lib/explorer.pys +80 -53
- pyscript_programming_language-1.11.0/pyscript/lib/fpstimer/__init__.pys +6 -0
- pyscript_programming_language-1.10.3/pyscript/lib/fpstimer.pys → pyscript_programming_language-1.11.0/pyscript/lib/fpstimer/py_fpstimer.py +11 -28
- pyscript_programming_language-1.11.0/pyscript/lib/inspect.pys +27 -0
- pyscript_programming_language-1.11.0/pyscript/lib/keyword.pys +2 -0
- pyscript_programming_language-1.11.0/pyscript/lib/opcode.pys +1 -0
- pyscript_programming_language-1.11.0/pyscript_programming_language.egg-info/PKG-INFO +100 -0
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript_programming_language.egg-info/SOURCES.txt +7 -2
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/setup.py +2 -2
- pyscript_programming_language-1.10.3/PKG-INFO +0 -87
- pyscript_programming_language-1.10.3/README.md +0 -52
- pyscript_programming_language-1.10.3/pyscript/lib/inspect.pys +0 -46
- pyscript_programming_language-1.10.3/pyscript/lib/keyword.pys +0 -2
- pyscript_programming_language-1.10.3/pyscript_programming_language.egg-info/PKG-INFO +0 -87
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/MANIFEST.in +0 -0
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/bases.py +0 -0
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/buffer.py +0 -0
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/handlers.py +0 -0
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/nodes.py +0 -0
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/utils/ansi.py +0 -0
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/utils/debug.py +0 -0
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/utils/decorators.py +0 -0
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/utils/generic.py +0 -0
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/utils/jsdict.py +0 -0
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/utils/module.py +0 -0
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/utils/path.py +0 -0
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/utils/similarity.py +0 -0
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/utils/string.py +0 -0
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/lib/__hello__.pys +0 -0
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/lib/ansi.pys +0 -0
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/lib/ast/__init__.pys +0 -0
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/lib/ast/ast_dump.py +0 -0
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/lib/ast/ast_walk.py +0 -0
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/lib/dis.pys +0 -0
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/lib/getch.pys +0 -0
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/lib/jsdict.pys +0 -0
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/lib/parser.pys +0 -0
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/lib/site.pys +0 -0
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/lib/symtable.pys +0 -0
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/lib/sys.pys +0 -0
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/lib/token.pys +0 -0
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/lib/tokenize/__init__.pys +0 -0
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/lib/tokenize/tok_untokenize.py +0 -0
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/site-packages/this.pys +0 -0
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/this.py +0 -0
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript_programming_language.egg-info/dependency_links.txt +0 -0
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript_programming_language.egg-info/requires.txt +0 -0
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript_programming_language.egg-info/top_level.txt +0 -0
- {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/setup.cfg +0 -0
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: pyscript-programming-language
|
|
3
|
+
Version: 1.11.0
|
|
4
|
+
Summary: PyScript Programming Language
|
|
5
|
+
Home-page: https://azzammuhyala.github.io/pyscript
|
|
6
|
+
Author: azzammuhyala
|
|
7
|
+
Author-email: azzammuhyala@gmail.com
|
|
8
|
+
License: MIT
|
|
9
|
+
Project-URL: Source, https://github.com/azzammuhyala/pyscript
|
|
10
|
+
Project-URL: Bug Tracker, https://github.com/azzammuhyala/pyscript/issues
|
|
11
|
+
Keywords: pyscript,pyslang,pys,programming,language,programming language
|
|
12
|
+
Classifier: Programming Language :: Python
|
|
13
|
+
Classifier: Programming Language :: Python :: 3
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
16
|
+
Classifier: Topic :: Software Development :: Interpreters
|
|
17
|
+
Classifier: Topic :: Software Development :: Compilers
|
|
18
|
+
Requires-Python: >=3.10
|
|
19
|
+
Description-Content-Type: text/markdown
|
|
20
|
+
Provides-Extra: other
|
|
21
|
+
Requires-Dist: beartype; extra == "other"
|
|
22
|
+
Requires-Dist: pygments; extra == "other"
|
|
23
|
+
Dynamic: author
|
|
24
|
+
Dynamic: author-email
|
|
25
|
+
Dynamic: classifier
|
|
26
|
+
Dynamic: description
|
|
27
|
+
Dynamic: description-content-type
|
|
28
|
+
Dynamic: home-page
|
|
29
|
+
Dynamic: keywords
|
|
30
|
+
Dynamic: license
|
|
31
|
+
Dynamic: project-url
|
|
32
|
+
Dynamic: provides-extra
|
|
33
|
+
Dynamic: requires-python
|
|
34
|
+
Dynamic: summary
|
|
35
|
+
|
|
36
|
+
# PyScript
|
|
37
|
+
|
|
38
|
+
<div align="center">
|
|
39
|
+
<img src="https://github.com/azzammuhyala/pyscript/blob/main/PyScript.png?raw=true" alt="PyScript Logo" width="200">
|
|
40
|
+
</div>
|
|
41
|
+
|
|
42
|
+
PyScript is a simple programming language built on top of Python. It combines some syntax from Python and JavaScript,
|
|
43
|
+
so if you're already familiar with Python or JavaScript, or both, it should be quite easy to learn.
|
|
44
|
+
|
|
45
|
+
## Introduction
|
|
46
|
+
PyScript may not be the language we'll be discussing, but the name PyScript already exists, a flexible and platform for
|
|
47
|
+
running Python in a browser. Since it's inception, the language was inspired by Python and JavaScript, which are
|
|
48
|
+
relatively easy for humans to read. This name was chosen because it wasn't immediately known whether this name was
|
|
49
|
+
already in use.
|
|
50
|
+
|
|
51
|
+
This language wasn't designed to compete with other modern programming languages, but rather as a learning for
|
|
52
|
+
understanding how programming languages work and how human written code can be understood by machines. Furthermore, this
|
|
53
|
+
language was created as a relatively complex project. Using Python as the foundation for PyScript, it's easy to
|
|
54
|
+
understand how the language is built without having to understand complex instructions like those in C, C++, and other
|
|
55
|
+
low-level languages.
|
|
56
|
+
|
|
57
|
+
To learn more about PyScript, you can see on [PyScript documentation](https://azzammuhyala.github.io/pyscript) or
|
|
58
|
+
[PyScript repository](https://github.com/azzammuhyala/pyscript) for full source code.
|
|
59
|
+
|
|
60
|
+
## Installation
|
|
61
|
+
First, you'll need to download Python. Make sure you're using the latest version above `3.10`, to ensure the code runs
|
|
62
|
+
correctly. Visit the official [Python website](https://python.org) to download it.
|
|
63
|
+
|
|
64
|
+
Next, after downloading and configuring the Python application, you can download the PyScript from
|
|
65
|
+
[PyScript releases](https://github.com/azzammuhyala/pyscript/releases) or from Python Pip with this command
|
|
66
|
+
(_Recommended_):
|
|
67
|
+
```sh
|
|
68
|
+
pip install -U pyscript-programming-language
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
[_OPTIONAL_] You can download additional libraries that PyScript requires with this command:
|
|
72
|
+
```sh
|
|
73
|
+
pip install -U pyscript-programming-language[other]
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
And also, you can download PyScript with `git`:
|
|
77
|
+
```sh
|
|
78
|
+
git clone https://github.com/azzammuhyala/pyscript
|
|
79
|
+
cd pyscript
|
|
80
|
+
python setup.py install
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
After that, you can run the PyScript shell (_REPL_) with this command:
|
|
84
|
+
```sh
|
|
85
|
+
python -m pyscript
|
|
86
|
+
```
|
|
87
|
+
If successful, you can see the version, release date, and a `>>>` like Python shell (_REPL_).
|
|
88
|
+
|
|
89
|
+
> If you are using the VS Code editor, you can use the
|
|
90
|
+
[PyScript extension](https://marketplace.visualstudio.com/items?itemName=azzammuhyala.pyslang) for Syntax Highlight!
|
|
91
|
+
|
|
92
|
+
## Syntax
|
|
93
|
+
Familiar? There it is!
|
|
94
|
+
<pre><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">op</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"># 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:#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:#CE9178">"Cannot be divided by 0!"</span><span style="color:#D4D4D4"><br></span><span style="color:#FFD705">}</span><span style="color:#D4D4D4"><br><br></span><span style="color:#C586C0">switch</span><span style="color:#D4D4D4"> </span><span style="color:#FFD705">(</span><span style="color:#8CDCFE">op</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:#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">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>
|
|
95
|
+
|
|
96
|
+
## Behind it
|
|
97
|
+
This language created from based up on a
|
|
98
|
+
[YouTube tutorial](https://www.youtube.com/playlist?list=PLZQftyCk7_SdoVexSmwy_tBgs7P0b97yD) (check more on GitHub
|
|
99
|
+
[here](https://github.com/davidcallanan/py-myopl-code) by **@davidcallanan**). At least, it takes about 6 months to
|
|
100
|
+
learn it, and also need to learn general things that exist in other programming languages.
|
|
@@ -0,0 +1,65 @@
|
|
|
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
|
+
</div>
|
|
6
|
+
|
|
7
|
+
PyScript is a simple programming language built on top of Python. It combines some syntax from Python and JavaScript,
|
|
8
|
+
so if you're already familiar with Python or JavaScript, or both, it should be quite easy to learn.
|
|
9
|
+
|
|
10
|
+
## Introduction
|
|
11
|
+
PyScript may not be the language we'll be discussing, but the name PyScript already exists, a flexible and platform for
|
|
12
|
+
running Python in a browser. Since it's inception, the language was inspired by Python and JavaScript, which are
|
|
13
|
+
relatively easy for humans to read. This name was chosen because it wasn't immediately known whether this name was
|
|
14
|
+
already in use.
|
|
15
|
+
|
|
16
|
+
This language wasn't designed to compete with other modern programming languages, but rather as a learning for
|
|
17
|
+
understanding how programming languages work and how human written code can be understood by machines. Furthermore, this
|
|
18
|
+
language was created as a relatively complex project. Using Python as the foundation for PyScript, it's easy to
|
|
19
|
+
understand how the language is built without having to understand complex instructions like those in C, C++, and other
|
|
20
|
+
low-level languages.
|
|
21
|
+
|
|
22
|
+
To learn more about PyScript, you can see on [PyScript documentation](https://azzammuhyala.github.io/pyscript) or
|
|
23
|
+
[PyScript repository](https://github.com/azzammuhyala/pyscript) for full source code.
|
|
24
|
+
|
|
25
|
+
## Installation
|
|
26
|
+
First, you'll need to download Python. Make sure you're using the latest version above `3.10`, to ensure the code runs
|
|
27
|
+
correctly. Visit the official [Python website](https://python.org) to download it.
|
|
28
|
+
|
|
29
|
+
Next, after downloading and configuring the Python application, you can download the PyScript from
|
|
30
|
+
[PyScript releases](https://github.com/azzammuhyala/pyscript/releases) or from Python Pip with this command
|
|
31
|
+
(_Recommended_):
|
|
32
|
+
```sh
|
|
33
|
+
pip install -U pyscript-programming-language
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
[_OPTIONAL_] You can download additional libraries that PyScript requires with this command:
|
|
37
|
+
```sh
|
|
38
|
+
pip install -U pyscript-programming-language[other]
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
And also, you can download PyScript with `git`:
|
|
42
|
+
```sh
|
|
43
|
+
git clone https://github.com/azzammuhyala/pyscript
|
|
44
|
+
cd pyscript
|
|
45
|
+
python setup.py install
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
After that, you can run the PyScript shell (_REPL_) with this command:
|
|
49
|
+
```sh
|
|
50
|
+
python -m pyscript
|
|
51
|
+
```
|
|
52
|
+
If successful, you can see the version, release date, and a `>>>` like Python shell (_REPL_).
|
|
53
|
+
|
|
54
|
+
> If you are using the VS Code editor, you can use the
|
|
55
|
+
[PyScript extension](https://marketplace.visualstudio.com/items?itemName=azzammuhyala.pyslang) for Syntax Highlight!
|
|
56
|
+
|
|
57
|
+
## Syntax
|
|
58
|
+
Familiar? There it is!
|
|
59
|
+
<pre><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">op</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"># 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:#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:#CE9178">"Cannot be divided by 0!"</span><span style="color:#D4D4D4"><br></span><span style="color:#FFD705">}</span><span style="color:#D4D4D4"><br><br></span><span style="color:#C586C0">switch</span><span style="color:#D4D4D4"> </span><span style="color:#FFD705">(</span><span style="color:#8CDCFE">op</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:#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">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>
|
|
60
|
+
|
|
61
|
+
## Behind it
|
|
62
|
+
This language created from based up on a
|
|
63
|
+
[YouTube tutorial](https://www.youtube.com/playlist?list=PLZQftyCk7_SdoVexSmwy_tBgs7P0b97yD) (check more on GitHub
|
|
64
|
+
[here](https://github.com/davidcallanan/py-myopl-code) by **@davidcallanan**). At least, it takes about 6 months to
|
|
65
|
+
learn it, and also need to learn general things that exist in other programming languages.
|
{pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/__init__.py
RENAMED
|
@@ -15,7 +15,7 @@ from .core.cache import undefined, hook
|
|
|
15
15
|
from .core.highlight import (
|
|
16
16
|
HLFMT_HTML, HLFMT_ANSI, HLFMT_BBCODE, pys_highlight, PygmentsPyScriptStyle, PygmentsPyScriptLexer
|
|
17
17
|
)
|
|
18
|
-
from .core.runner import pys_exec, pys_eval, pys_require, pys_shell
|
|
18
|
+
from .core.runner import pys_runner, pys_exec, pys_eval, pys_require, pys_shell
|
|
19
19
|
from .core.version import version, version_info, __version__, __date__
|
|
20
20
|
|
|
21
21
|
__all__ = (
|
|
@@ -36,6 +36,7 @@ __all__ = (
|
|
|
36
36
|
'version',
|
|
37
37
|
'version_info',
|
|
38
38
|
'pys_highlight',
|
|
39
|
+
'pys_runner',
|
|
39
40
|
'pys_exec',
|
|
40
41
|
'pys_eval',
|
|
41
42
|
'pys_require',
|
{pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/__init__.pyi
RENAMED
|
@@ -3,6 +3,7 @@ from typing import TYPE_CHECKING, Any, Callable, Iterable, Literal, Optional
|
|
|
3
3
|
if TYPE_CHECKING:
|
|
4
4
|
from .core.buffer import PysFileBuffer
|
|
5
5
|
from .core.cache import PysUndefined, PysHook
|
|
6
|
+
from .core.context import PysContext
|
|
6
7
|
from .core.highlight import _PysHighlightFormatter
|
|
7
8
|
from .core.position import PysPosition
|
|
8
9
|
from .core.results import PysExecuteResult
|
|
@@ -42,8 +43,8 @@ def pys_highlight(
|
|
|
42
43
|
Callable[
|
|
43
44
|
[
|
|
44
45
|
str | Literal[
|
|
45
|
-
'start', '
|
|
46
|
-
'
|
|
46
|
+
'start', 'default', 'newline', 'keyword', 'keyword-constant', 'identifier', 'identifier-constant',
|
|
47
|
+
'identifier-function', 'identifier-type', 'number', 'string', 'comment', 'invalid', 'end'
|
|
47
48
|
],
|
|
48
49
|
PysPosition,
|
|
49
50
|
str
|
|
@@ -54,6 +55,16 @@ def pys_highlight(
|
|
|
54
55
|
max_bracket_level: int = 3
|
|
55
56
|
) -> str: ...
|
|
56
57
|
|
|
58
|
+
def pys_runner(
|
|
59
|
+
file: PysFileBuffer,
|
|
60
|
+
mode: Literal['exec', 'eval', 'single'],
|
|
61
|
+
symbol_table: PysSymbolTable,
|
|
62
|
+
flags: Optional[int] = None,
|
|
63
|
+
parser_flags: int = DEFAULT,
|
|
64
|
+
context_parent: Optional[PysContext] = None,
|
|
65
|
+
context_parent_entry_position: Optional[PysPosition] = None
|
|
66
|
+
) -> PysExecuteResult: ...
|
|
67
|
+
|
|
57
68
|
def pys_exec(
|
|
58
69
|
source: str | bytes | bytearray | Iterable | BuiltinMethodType | IOBase | PysFileBuffer,
|
|
59
70
|
globals: Optional[dict[str, Any] | PysSymbolTable | PysUndefined] = None,
|
{pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/__main__.py
RENAMED
|
@@ -4,16 +4,24 @@ from .core.constants import DEFAULT, DEBUG, DONT_SHOW_BANNER_ON_SHELL, NO_COLOR
|
|
|
4
4
|
from .core.highlight import (
|
|
5
5
|
HLFMT_HTML, HLFMT_ANSI, HLFMT_BBCODE, pys_highlight, PygmentsPyScriptStyle, PygmentsPyScriptLexer
|
|
6
6
|
)
|
|
7
|
-
from .core.runner import
|
|
7
|
+
from .core.runner import _normalize_namespace, pys_runner, pys_shell
|
|
8
8
|
from .core.utils.module import get_module_name_from_path, remove_python_path
|
|
9
9
|
from .core.utils.path import normpath, getcwd
|
|
10
10
|
from .core.version import __version__
|
|
11
11
|
|
|
12
12
|
try:
|
|
13
13
|
from pygments import highlight
|
|
14
|
-
from pygments.formatters import
|
|
14
|
+
from pygments.formatters import (
|
|
15
|
+
BBCodeFormatter,
|
|
16
|
+
HtmlFormatter,
|
|
17
|
+
LatexFormatter,
|
|
18
|
+
TerminalFormatter, TerminalTrueColorFormatter, Terminal256Formatter
|
|
19
|
+
)
|
|
15
20
|
|
|
16
21
|
FORMAT_PYGMENTS_MAP = {
|
|
22
|
+
'pm-bbcode': BBCodeFormatter,
|
|
23
|
+
'pm-html': HtmlFormatter,
|
|
24
|
+
'pm-latex': LatexFormatter,
|
|
17
25
|
'pm-terminal': TerminalFormatter,
|
|
18
26
|
'pm-true-terminal': TerminalTrueColorFormatter,
|
|
19
27
|
'pm-256-terminal': Terminal256Formatter
|
|
@@ -23,27 +31,11 @@ try:
|
|
|
23
31
|
except ImportError:
|
|
24
32
|
PYGMENTS = False
|
|
25
33
|
|
|
26
|
-
from argparse import ArgumentParser
|
|
34
|
+
from argparse import OPTIONAL, REMAINDER, ArgumentParser
|
|
27
35
|
from os import environ
|
|
28
36
|
|
|
29
37
|
import sys
|
|
30
38
|
|
|
31
|
-
def split_argv():
|
|
32
|
-
need_value_arguments = {'-c', '--command', '-l', '--highlight', '-r', '--py-recursion'}
|
|
33
|
-
argv = sys.argv
|
|
34
|
-
i = 1
|
|
35
|
-
|
|
36
|
-
while i < len(argv):
|
|
37
|
-
argument = argv[i]
|
|
38
|
-
if argument in need_value_arguments:
|
|
39
|
-
i += 1
|
|
40
|
-
elif not argument.startswith('-'):
|
|
41
|
-
break
|
|
42
|
-
i += 1
|
|
43
|
-
|
|
44
|
-
hook.argv = argv[i:]
|
|
45
|
-
return argv[1:i + 1]
|
|
46
|
-
|
|
47
39
|
FORMAT_HIGHLIGHT_MAP = {
|
|
48
40
|
'html': HLFMT_HTML,
|
|
49
41
|
'ansi': HLFMT_ANSI,
|
|
@@ -55,14 +47,6 @@ parser = ArgumentParser(
|
|
|
55
47
|
description=f'PyScript Launcher for Python Version {".".join(map(str, sys.version_info))}'
|
|
56
48
|
)
|
|
57
49
|
|
|
58
|
-
parser.add_argument(
|
|
59
|
-
'file',
|
|
60
|
-
type=str,
|
|
61
|
-
nargs='?',
|
|
62
|
-
default=None,
|
|
63
|
-
help="File path to be executed"
|
|
64
|
-
)
|
|
65
|
-
|
|
66
50
|
parser.add_argument(
|
|
67
51
|
'-v', '--version',
|
|
68
52
|
action='version',
|
|
@@ -77,9 +61,9 @@ parser.add_argument(
|
|
|
77
61
|
)
|
|
78
62
|
|
|
79
63
|
parser.add_argument(
|
|
80
|
-
'-d', '--debug',
|
|
64
|
+
'-d', '-O', '--debug',
|
|
81
65
|
action='store_true',
|
|
82
|
-
help="Set a debug flag, this will ignore assert statement"
|
|
66
|
+
help="Set a debug flag, this will ignore assert statement. Check the flag is active with the __debug__ keyword"
|
|
83
67
|
)
|
|
84
68
|
|
|
85
69
|
parser.add_argument(
|
|
@@ -111,7 +95,7 @@ parser.add_argument(
|
|
|
111
95
|
parser.add_argument(
|
|
112
96
|
'-P',
|
|
113
97
|
action='store_true',
|
|
114
|
-
help="Don't prepend a potentially unsafe path to sys.path (python sys)"
|
|
98
|
+
help="Don't prepend a potentially unsafe path to sys.path (python sys.path)"
|
|
115
99
|
)
|
|
116
100
|
|
|
117
101
|
parser.add_argument(
|
|
@@ -120,11 +104,25 @@ parser.add_argument(
|
|
|
120
104
|
help="Don't print version and copyright messages on interactive startup"
|
|
121
105
|
)
|
|
122
106
|
|
|
107
|
+
parser.add_argument(
|
|
108
|
+
'file',
|
|
109
|
+
type=str,
|
|
110
|
+
nargs=OPTIONAL,
|
|
111
|
+
default=None,
|
|
112
|
+
help="File path to be executed"
|
|
113
|
+
)
|
|
114
|
+
|
|
115
|
+
parser.add_argument(
|
|
116
|
+
'argv',
|
|
117
|
+
nargs=REMAINDER,
|
|
118
|
+
help="Remaining arguments stored in hook.argv (sys.argv or sys.hook.argv)"
|
|
119
|
+
)
|
|
120
|
+
|
|
123
121
|
def argument_error(argument, message):
|
|
124
122
|
parser.print_usage(sys.stderr)
|
|
125
123
|
parser.exit(2, f"{parser.prog}: error: argument {argument}: {message}\n")
|
|
126
124
|
|
|
127
|
-
args = parser.parse_args(
|
|
125
|
+
args = parser.parse_args()
|
|
128
126
|
|
|
129
127
|
if args.highlight and args.file is None:
|
|
130
128
|
argument_error("-l/--highlight", "argument 'file' is required")
|
|
@@ -148,7 +146,10 @@ if args.P:
|
|
|
148
146
|
if args.q:
|
|
149
147
|
flags |= DONT_SHOW_BANNER_ON_SHELL
|
|
150
148
|
|
|
149
|
+
hook.argv.extend(args.argv)
|
|
150
|
+
|
|
151
151
|
if args.file is not None:
|
|
152
|
+
hook.argv[0] = args.file
|
|
152
153
|
path = normpath(args.file)
|
|
153
154
|
|
|
154
155
|
try:
|
|
@@ -180,11 +181,10 @@ if args.file is not None:
|
|
|
180
181
|
)
|
|
181
182
|
else:
|
|
182
183
|
print(
|
|
183
|
-
|
|
184
|
-
end=highlight(
|
|
184
|
+
highlight(
|
|
185
185
|
code=file.text,
|
|
186
186
|
lexer=PygmentsPyScriptLexer(),
|
|
187
|
-
formatter=FORMAT_PYGMENTS_MAP[args.highlight](style=PygmentsPyScriptStyle)
|
|
187
|
+
formatter=FORMAT_PYGMENTS_MAP[args.highlight](style=PygmentsPyScriptStyle, full=True)
|
|
188
188
|
)
|
|
189
189
|
)
|
|
190
190
|
except BaseException as e:
|
|
@@ -194,7 +194,7 @@ if args.file is not None:
|
|
|
194
194
|
result = pys_runner(
|
|
195
195
|
file=file,
|
|
196
196
|
mode='exec',
|
|
197
|
-
symbol_table=
|
|
197
|
+
symbol_table=_normalize_namespace(file, undefined),
|
|
198
198
|
flags=flags
|
|
199
199
|
)
|
|
200
200
|
|
|
@@ -211,11 +211,13 @@ if args.file is not None:
|
|
|
211
211
|
)
|
|
212
212
|
|
|
213
213
|
elif args.command is not None:
|
|
214
|
-
|
|
214
|
+
hook.argv[0] = '-c'
|
|
215
|
+
|
|
216
|
+
file = PysFileBuffer(args.command, '<arg-command>')
|
|
215
217
|
code = pys_runner(
|
|
216
218
|
file=file,
|
|
217
219
|
mode='exec',
|
|
218
|
-
symbol_table=
|
|
220
|
+
symbol_table=_normalize_namespace(file, undefined),
|
|
219
221
|
flags=flags
|
|
220
222
|
).end_process()[0]
|
|
221
223
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from .bases import Pys
|
|
2
2
|
from .checks import is_unpack_assignment
|
|
3
|
-
from .constants import TOKENS,
|
|
3
|
+
from .constants import TOKENS, DEFAULT
|
|
4
4
|
from .context import PysContext
|
|
5
5
|
from .exceptions import PysTraceback
|
|
6
6
|
from .nodes import PysNode, PysKeywordNode, PysIdentifierNode, PysAttributeNode, PysSubscriptNode
|
|
@@ -363,7 +363,7 @@ class PysAnalyzer(Pys):
|
|
|
363
363
|
|
|
364
364
|
def visit_FunctionNode(self, node):
|
|
365
365
|
if node.constructor and self.in_class == 0:
|
|
366
|
-
self.throw(
|
|
366
|
+
self.throw("constructor function outside of class", node.name.position)
|
|
367
367
|
return
|
|
368
368
|
|
|
369
369
|
for decorator in node.decorators:
|
|
@@ -410,7 +410,7 @@ class PysAnalyzer(Pys):
|
|
|
410
410
|
|
|
411
411
|
def visit_GlobalNode(self, node):
|
|
412
412
|
if self.in_function == 0:
|
|
413
|
-
self.throw(
|
|
413
|
+
self.throw("global outside of function", node.position)
|
|
414
414
|
|
|
415
415
|
for identifier in node.identifiers:
|
|
416
416
|
if identifier.value in self.parameters:
|
|
@@ -419,7 +419,7 @@ class PysAnalyzer(Pys):
|
|
|
419
419
|
|
|
420
420
|
def visit_ReturnNode(self, node):
|
|
421
421
|
if self.in_function == 0:
|
|
422
|
-
self.throw(
|
|
422
|
+
self.throw("return outside of function", node.position)
|
|
423
423
|
return
|
|
424
424
|
|
|
425
425
|
if node.value:
|
|
@@ -460,20 +460,20 @@ class PysAnalyzer(Pys):
|
|
|
460
460
|
return
|
|
461
461
|
|
|
462
462
|
elif type is PysKeywordNode:
|
|
463
|
-
self.throw(f"cannot
|
|
463
|
+
self.throw(f"cannot delete {target.name.value}", target.position)
|
|
464
464
|
return
|
|
465
465
|
|
|
466
466
|
elif type is not PysIdentifierNode:
|
|
467
|
-
self.throw(
|
|
467
|
+
self.throw("cannot delete literal", target.position)
|
|
468
468
|
return
|
|
469
469
|
|
|
470
470
|
def visit_ContinueNode(self, node):
|
|
471
471
|
if self.in_loop == 0:
|
|
472
|
-
self.throw(
|
|
472
|
+
self.throw("continue outside of loop", node.position)
|
|
473
473
|
|
|
474
474
|
def visit_BreakNode(self, node):
|
|
475
475
|
if self.in_loop == 0 and self.in_switch == 0:
|
|
476
|
-
self.throw(
|
|
476
|
+
self.throw("break outside of loop or switch case", node.position)
|
|
477
477
|
|
|
478
478
|
def visit_slice_SubscriptNode(self, nslice):
|
|
479
479
|
type = nslice.__class__
|
|
@@ -18,7 +18,8 @@ is_unpack_assignment = frozenset([
|
|
|
18
18
|
PysSetNode, PysListNode, PysTupleNode
|
|
19
19
|
]).__contains__
|
|
20
20
|
|
|
21
|
-
is_keyword = frozenset(KEYWORDS
|
|
21
|
+
is_keyword = frozenset(KEYWORDS).__contains__
|
|
22
|
+
is_constant_keywords = frozenset(CONSTANT_KEYWORDS).__contains__
|
|
22
23
|
|
|
23
24
|
is_python_extensions = frozenset([
|
|
24
25
|
'.py', '.ipy', '.pyc', '.pyd', '.pyi', '.pyo', '.pyp', '.pyw', '.pyz', '.rpy', '.xpy', '.pyproj'
|
|
@@ -37,7 +38,5 @@ is_left_bracket = frozenset(BRACKETS_MAP.keys()).__contains__
|
|
|
37
38
|
is_right_bracket = frozenset(BRACKETS_MAP.values()).__contains__
|
|
38
39
|
is_bracket = frozenset(BRACKETS_MAP.keys() | BRACKETS_MAP.values()).__contains__
|
|
39
40
|
|
|
40
|
-
is_constant_keywords = frozenset(CONSTANT_KEYWORDS).__contains__
|
|
41
|
-
|
|
42
41
|
is_private_attribute = lambda name : name.startswith('_') if isinstance(name, str) else name
|
|
43
42
|
is_public_attribute = lambda name : not name.startswith('_') if isinstance(name, str) else name
|
|
@@ -6,6 +6,7 @@ PYSCRIPT_PATH = sep.join(__file__.split(sep)[:-2])
|
|
|
6
6
|
CORE_PATH = join(PYSCRIPT_PATH, 'core')
|
|
7
7
|
LIBRARIES_PATH = join(PYSCRIPT_PATH, 'lib')
|
|
8
8
|
SITE_PACKAGES_PATH = join(PYSCRIPT_PATH, 'site-packages')
|
|
9
|
+
OTHER_PATH = join(CORE_PATH, 'other')
|
|
9
10
|
|
|
10
11
|
# environment variables
|
|
11
12
|
ENV_PYSCRIPT_NO_EXCEPTHOOK = 'PYSCRIPT_NO_EXCEPTHOOK'
|
|
@@ -92,65 +93,16 @@ TOKENS = MappingProxyType({
|
|
|
92
93
|
})
|
|
93
94
|
|
|
94
95
|
# keywords
|
|
95
|
-
KEYWORDS =
|
|
96
|
-
'__debug__'
|
|
97
|
-
'
|
|
98
|
-
'
|
|
99
|
-
'
|
|
100
|
-
|
|
101
|
-
'as': 'as',
|
|
102
|
-
'assert': 'assert',
|
|
103
|
-
'break': 'break',
|
|
104
|
-
'case': 'case',
|
|
105
|
-
'catch': 'catch',
|
|
106
|
-
'class': 'class',
|
|
107
|
-
'constructor': 'constructor',
|
|
108
|
-
'continue': 'continue',
|
|
109
|
-
'def': 'def',
|
|
110
|
-
'default': 'default',
|
|
111
|
-
'define': 'define',
|
|
112
|
-
'del': 'del',
|
|
113
|
-
'delete': 'delete',
|
|
114
|
-
'do': 'do',
|
|
115
|
-
'elif': 'elif',
|
|
116
|
-
'else': 'else',
|
|
117
|
-
'except': 'except',
|
|
118
|
-
'extends': 'extends',
|
|
119
|
-
'false': 'false',
|
|
120
|
-
'finally': 'finally',
|
|
121
|
-
'for': 'for',
|
|
122
|
-
'from': 'from',
|
|
123
|
-
'func': 'func',
|
|
124
|
-
'function': 'function',
|
|
125
|
-
'global': 'global',
|
|
126
|
-
'if': 'if',
|
|
127
|
-
'import': 'import',
|
|
128
|
-
'in': 'in',
|
|
129
|
-
'is': 'is',
|
|
130
|
-
'match': 'match',
|
|
131
|
-
'nil': 'nil',
|
|
132
|
-
'none': 'none',
|
|
133
|
-
'null': 'null',
|
|
134
|
-
'not': 'not',
|
|
135
|
-
'true': 'true',
|
|
136
|
-
'of': 'of',
|
|
137
|
-
'or': 'or',
|
|
138
|
-
'raise': 'raise',
|
|
139
|
-
'repeat': 'repeat',
|
|
140
|
-
'return': 'return',
|
|
141
|
-
'switch': 'switch',
|
|
142
|
-
'throw': 'throw',
|
|
143
|
-
'try': 'try',
|
|
144
|
-
'until': 'until',
|
|
145
|
-
'while': 'while',
|
|
146
|
-
'with': 'with'
|
|
147
|
-
})
|
|
96
|
+
KEYWORDS = (
|
|
97
|
+
'__debug__', 'False', 'None', 'True', 'and', 'as', 'assert', 'break', 'case', 'catch', 'class', 'constructor',
|
|
98
|
+
'continue', 'def', 'default', 'define', 'del', 'delete', 'do', 'elif', 'else', 'except', 'extends', 'false',
|
|
99
|
+
'finally', 'for', 'from', 'func', 'function', 'global', 'if', 'import', 'in', 'is', 'match', 'nil', 'none', 'null',
|
|
100
|
+
'not', 'true', 'typeof', 'of', 'or', 'raise', 'repeat', 'return', 'switch', 'throw', 'try', 'until', 'while', 'with'
|
|
101
|
+
)
|
|
148
102
|
|
|
149
103
|
CONSTANT_KEYWORDS = (
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
KEYWORDS['function'], KEYWORDS['false'], KEYWORDS['global'], KEYWORDS['in'], KEYWORDS['is'], KEYWORDS['not'],
|
|
153
|
-
KEYWORDS['nil'], KEYWORDS['none'], KEYWORDS['null'], KEYWORDS['of'], KEYWORDS['or'], KEYWORDS['true']
|
|
104
|
+
'__debug__', 'False', 'None', 'True', 'and', 'class', 'constructor', 'def', 'define', 'extends', 'func', 'function',
|
|
105
|
+
'false', 'global', 'in', 'is', 'not', 'nil', 'none', 'null', 'of', 'or', 'true', 'typeof'
|
|
154
106
|
)
|
|
155
107
|
|
|
156
108
|
# flags
|