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.
Files changed (82) hide show
  1. pyscript_programming_language-1.11.0/PKG-INFO +100 -0
  2. pyscript_programming_language-1.11.0/README.md +65 -0
  3. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/__init__.py +2 -1
  4. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/__init__.pyi +13 -2
  5. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/__main__.py +39 -37
  6. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/__init__.py +2 -0
  7. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/analyzer.py +8 -8
  8. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/cache.py +1 -1
  9. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/checks.py +2 -3
  10. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/constants.py +9 -57
  11. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/context.py +1 -1
  12. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/exceptions.py +5 -7
  13. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/highlight.py +63 -94
  14. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/interpreter.py +65 -66
  15. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/lexer.py +12 -12
  16. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/mapping.py +17 -17
  17. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/objects.py +8 -21
  18. pyscript_programming_language-1.11.0/pyscript/core/other/copyright +2 -0
  19. pyscript_programming_language-1.11.0/pyscript/core/other/credits +2 -0
  20. pyscript_programming_language-1.11.0/pyscript/core/other/license +21 -0
  21. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/parser.py +153 -149
  22. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/position.py +7 -5
  23. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/pysbuiltins.py +38 -24
  24. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/results.py +4 -0
  25. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/runner.py +59 -31
  26. {pyscript_programming_language-1.10.3/pyscript/core/utils → pyscript_programming_language-1.11.0/pyscript/core}/shell.py +32 -18
  27. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/symtab.py +2 -4
  28. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/token.py +2 -5
  29. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/utils/__init__.py +0 -2
  30. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/version.py +2 -2
  31. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/lib/ast/ast_literal_eval.py +6 -6
  32. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/lib/ast/ast_unparse.py +80 -124
  33. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/lib/brainfuck.pys +1 -1
  34. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/lib/explorer.pys +80 -53
  35. pyscript_programming_language-1.11.0/pyscript/lib/fpstimer/__init__.pys +6 -0
  36. pyscript_programming_language-1.10.3/pyscript/lib/fpstimer.pys → pyscript_programming_language-1.11.0/pyscript/lib/fpstimer/py_fpstimer.py +11 -28
  37. pyscript_programming_language-1.11.0/pyscript/lib/inspect.pys +27 -0
  38. pyscript_programming_language-1.11.0/pyscript/lib/keyword.pys +2 -0
  39. pyscript_programming_language-1.11.0/pyscript/lib/opcode.pys +1 -0
  40. pyscript_programming_language-1.11.0/pyscript_programming_language.egg-info/PKG-INFO +100 -0
  41. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript_programming_language.egg-info/SOURCES.txt +7 -2
  42. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/setup.py +2 -2
  43. pyscript_programming_language-1.10.3/PKG-INFO +0 -87
  44. pyscript_programming_language-1.10.3/README.md +0 -52
  45. pyscript_programming_language-1.10.3/pyscript/lib/inspect.pys +0 -46
  46. pyscript_programming_language-1.10.3/pyscript/lib/keyword.pys +0 -2
  47. pyscript_programming_language-1.10.3/pyscript_programming_language.egg-info/PKG-INFO +0 -87
  48. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/MANIFEST.in +0 -0
  49. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/bases.py +0 -0
  50. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/buffer.py +0 -0
  51. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/handlers.py +0 -0
  52. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/nodes.py +0 -0
  53. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/utils/ansi.py +0 -0
  54. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/utils/debug.py +0 -0
  55. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/utils/decorators.py +0 -0
  56. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/utils/generic.py +0 -0
  57. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/utils/jsdict.py +0 -0
  58. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/utils/module.py +0 -0
  59. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/utils/path.py +0 -0
  60. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/utils/similarity.py +0 -0
  61. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/core/utils/string.py +0 -0
  62. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/lib/__hello__.pys +0 -0
  63. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/lib/ansi.pys +0 -0
  64. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/lib/ast/__init__.pys +0 -0
  65. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/lib/ast/ast_dump.py +0 -0
  66. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/lib/ast/ast_walk.py +0 -0
  67. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/lib/dis.pys +0 -0
  68. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/lib/getch.pys +0 -0
  69. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/lib/jsdict.pys +0 -0
  70. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/lib/parser.pys +0 -0
  71. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/lib/site.pys +0 -0
  72. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/lib/symtable.pys +0 -0
  73. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/lib/sys.pys +0 -0
  74. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/lib/token.pys +0 -0
  75. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/lib/tokenize/__init__.pys +0 -0
  76. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/lib/tokenize/tok_untokenize.py +0 -0
  77. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/site-packages/this.pys +0 -0
  78. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript/this.py +0 -0
  79. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript_programming_language.egg-info/dependency_links.txt +0 -0
  80. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript_programming_language.egg-info/requires.txt +0 -0
  81. {pyscript_programming_language-1.10.3 → pyscript_programming_language-1.11.0}/pyscript_programming_language.egg-info/top_level.txt +0 -0
  82. {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">&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">op</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"># 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">&quot;Cannot be divided by 0!&quot;</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">&#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:#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">&quot;Unknown operation&quot;</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">&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">op</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"># 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">&quot;Cannot be divided by 0!&quot;</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">&#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:#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">&quot;Unknown operation&quot;</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.
@@ -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',
@@ -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', 'invalid', 'identifier', 'identifier-constant', 'identifier-function', 'identifier-type',
46
- 'keyword', 'keyword-constant', 'number', 'string', 'comment', 'newline', 'default', 'end'
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,
@@ -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 _normalize_globals, pys_runner, pys_shell
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 TerminalFormatter, TerminalTrueColorFormatter, Terminal256Formatter
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(split_argv())
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
- flush=True,
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=_normalize_globals(file, undefined),
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
- file = PysFileBuffer(args.command)
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=_normalize_globals(file, undefined),
220
+ symbol_table=_normalize_namespace(file, undefined),
219
221
  flags=flags
220
222
  ).end_process()[0]
221
223
 
@@ -23,6 +23,7 @@ from . import (
23
23
  pysbuiltins,
24
24
  results,
25
25
  runner,
26
+ shell,
26
27
  symtab,
27
28
  token,
28
29
  utils,
@@ -50,6 +51,7 @@ __all__ = (
50
51
  'pysbuiltins',
51
52
  'results',
52
53
  'runner',
54
+ 'shell',
53
55
  'symtab',
54
56
  'token',
55
57
  'utils',
@@ -1,6 +1,6 @@
1
1
  from .bases import Pys
2
2
  from .checks import is_unpack_assignment
3
- from .constants import TOKENS, KEYWORDS, DEFAULT
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(f"{KEYWORDS['constructor']} function outside of class", node.name.position)
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(f"{KEYWORDS['global']} outside of function", node.position)
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(f"{KEYWORDS['return']} outside of function", node.position)
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 {KEYWORDS['delete']} {target.name.value}", target.position)
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(f"cannot {KEYWORDS['delete']} literal", target.position)
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(f"{KEYWORDS['continue']} outside of loop", node.position)
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(f"{KEYWORDS['break']} outside of loop or switch case", node.position)
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__
@@ -37,7 +37,7 @@ class PysHook(Pys):
37
37
  def __new_singleton__(cls) -> 'PysHook':
38
38
  global hook
39
39
  hook = super(cls, cls).__new__(cls)
40
- hook.argv = []
40
+ hook.argv = ['']
41
41
  hook.running_shell = False
42
42
  hook.running_breakpoint = False
43
43
  hook.display = print_display
@@ -18,7 +18,8 @@ is_unpack_assignment = frozenset([
18
18
  PysSetNode, PysListNode, PysTupleNode
19
19
  ]).__contains__
20
20
 
21
- is_keyword = frozenset(KEYWORDS.values()).__contains__
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 = MappingProxyType({
96
- '__debug__': '__debug__',
97
- 'False': 'False',
98
- 'None': 'None',
99
- 'True': 'True',
100
- 'and': 'and',
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
- KEYWORDS['__debug__'], KEYWORDS['False'], KEYWORDS['None'], KEYWORDS['True'], KEYWORDS['and'], KEYWORDS['class'],
151
- KEYWORDS['constructor'], KEYWORDS['def'], KEYWORDS['define'], KEYWORDS['extends'], KEYWORDS['func'],
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