pyscript-programming-language 1.3.0__tar.gz → 1.3.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of pyscript-programming-language might be problematic. Click here for more details.

Files changed (46) hide show
  1. {pyscript_programming_language-1.3.0 → pyscript_programming_language-1.3.1}/PKG-INFO +7 -3
  2. {pyscript_programming_language-1.3.0 → pyscript_programming_language-1.3.1}/README.md +7 -3
  3. {pyscript_programming_language-1.3.0 → pyscript_programming_language-1.3.1}/pyscript/core/parser.py +109 -147
  4. {pyscript_programming_language-1.3.0 → pyscript_programming_language-1.3.1}/pyscript/core/runner.py +1 -1
  5. pyscript_programming_language-1.3.1/pyscript/core/version.py +5 -0
  6. {pyscript_programming_language-1.3.0 → pyscript_programming_language-1.3.1}/pyscript_programming_language.egg-info/PKG-INFO +7 -3
  7. {pyscript_programming_language-1.3.0 → pyscript_programming_language-1.3.1}/setup.py +1 -1
  8. pyscript_programming_language-1.3.0/pyscript/core/version.py +0 -5
  9. {pyscript_programming_language-1.3.0 → pyscript_programming_language-1.3.1}/MANIFEST.in +0 -0
  10. {pyscript_programming_language-1.3.0 → pyscript_programming_language-1.3.1}/pyscript/__init__.py +0 -0
  11. {pyscript_programming_language-1.3.0 → pyscript_programming_language-1.3.1}/pyscript/__init__.pyi +0 -0
  12. {pyscript_programming_language-1.3.0 → pyscript_programming_language-1.3.1}/pyscript/__main__.py +0 -0
  13. {pyscript_programming_language-1.3.0 → pyscript_programming_language-1.3.1}/pyscript/core/__init__.py +0 -0
  14. {pyscript_programming_language-1.3.0 → pyscript_programming_language-1.3.1}/pyscript/core/analyzer.py +0 -0
  15. {pyscript_programming_language-1.3.0 → pyscript_programming_language-1.3.1}/pyscript/core/bases.py +0 -0
  16. {pyscript_programming_language-1.3.0 → pyscript_programming_language-1.3.1}/pyscript/core/buffer.py +0 -0
  17. {pyscript_programming_language-1.3.0 → pyscript_programming_language-1.3.1}/pyscript/core/cache.py +0 -0
  18. {pyscript_programming_language-1.3.0 → pyscript_programming_language-1.3.1}/pyscript/core/constants.py +0 -0
  19. {pyscript_programming_language-1.3.0 → pyscript_programming_language-1.3.1}/pyscript/core/context.py +0 -0
  20. {pyscript_programming_language-1.3.0 → pyscript_programming_language-1.3.1}/pyscript/core/exceptions.py +0 -0
  21. {pyscript_programming_language-1.3.0 → pyscript_programming_language-1.3.1}/pyscript/core/handlers.py +0 -0
  22. {pyscript_programming_language-1.3.0 → pyscript_programming_language-1.3.1}/pyscript/core/highlight.py +0 -0
  23. {pyscript_programming_language-1.3.0 → pyscript_programming_language-1.3.1}/pyscript/core/interpreter.py +0 -0
  24. {pyscript_programming_language-1.3.0 → pyscript_programming_language-1.3.1}/pyscript/core/lexer.py +0 -0
  25. {pyscript_programming_language-1.3.0 → pyscript_programming_language-1.3.1}/pyscript/core/nodes.py +0 -0
  26. {pyscript_programming_language-1.3.0 → pyscript_programming_language-1.3.1}/pyscript/core/objects.py +0 -0
  27. {pyscript_programming_language-1.3.0 → pyscript_programming_language-1.3.1}/pyscript/core/position.py +0 -0
  28. {pyscript_programming_language-1.3.0 → pyscript_programming_language-1.3.1}/pyscript/core/pysbuiltins.py +0 -0
  29. {pyscript_programming_language-1.3.0 → pyscript_programming_language-1.3.1}/pyscript/core/results.py +0 -0
  30. {pyscript_programming_language-1.3.0 → pyscript_programming_language-1.3.1}/pyscript/core/singletons.py +0 -0
  31. {pyscript_programming_language-1.3.0 → pyscript_programming_language-1.3.1}/pyscript/core/symtab.py +0 -0
  32. {pyscript_programming_language-1.3.0 → pyscript_programming_language-1.3.1}/pyscript/core/token.py +0 -0
  33. {pyscript_programming_language-1.3.0 → pyscript_programming_language-1.3.1}/pyscript/core/utils.py +0 -0
  34. {pyscript_programming_language-1.3.0 → pyscript_programming_language-1.3.1}/pyscript/lib/__hello__.pys +0 -0
  35. {pyscript_programming_language-1.3.0 → pyscript_programming_language-1.3.1}/pyscript/lib/brainfuck.pys +0 -0
  36. {pyscript_programming_language-1.3.0 → pyscript_programming_language-1.3.1}/pyscript/lib/clock.pys +0 -0
  37. {pyscript_programming_language-1.3.0 → pyscript_programming_language-1.3.1}/pyscript/lib/getch.pys +0 -0
  38. {pyscript_programming_language-1.3.0 → pyscript_programming_language-1.3.1}/pyscript/lib/jsdict.pys +0 -0
  39. {pyscript_programming_language-1.3.0 → pyscript_programming_language-1.3.1}/pyscript/lib/parser.pys +0 -0
  40. {pyscript_programming_language-1.3.0 → pyscript_programming_language-1.3.1}/pyscript/lib/sys.pys +0 -0
  41. {pyscript_programming_language-1.3.0 → pyscript_programming_language-1.3.1}/pyscript/lib/this.pys +0 -0
  42. {pyscript_programming_language-1.3.0 → pyscript_programming_language-1.3.1}/pyscript/this.py +0 -0
  43. {pyscript_programming_language-1.3.0 → pyscript_programming_language-1.3.1}/pyscript_programming_language.egg-info/SOURCES.txt +0 -0
  44. {pyscript_programming_language-1.3.0 → pyscript_programming_language-1.3.1}/pyscript_programming_language.egg-info/dependency_links.txt +0 -0
  45. {pyscript_programming_language-1.3.0 → pyscript_programming_language-1.3.1}/pyscript_programming_language.egg-info/top_level.txt +0 -0
  46. {pyscript_programming_language-1.3.0 → pyscript_programming_language-1.3.1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyscript-programming-language
3
- Version: 1.3.0
3
+ Version: 1.3.1
4
4
  Summary: PyScript Programming Language
5
5
  Home-page: https://github.com/azzammuhyala/pyscript
6
6
  Author: azzammuhyala
@@ -50,6 +50,10 @@ language was created as a relatively complex project. Using Python as the founda
50
50
  understand syntax makes it easy to understand how the language is built without having to understand complex
51
51
  instructions like those in C, C++, and other low-level languages.
52
52
 
53
- To learn more about PyScript's syntax and packages, you can check out the
54
- [PyScript documentation here](https://azzammuhyala.github.io/pyscript) or see on
53
+ To learn more about PyScript, you can see on [PyScript documentation here](https://azzammuhyala.github.io/pyscript) or
55
54
  [PyScript repository](https://github.com/azzammuhyala/pyscript).
55
+
56
+ ## Behind it
57
+ This language created from based up on a
58
+ [YouTube tutorial](https://www.youtube.com/playlist?list=PLZQftyCk7_SdoVexSmwy_tBgs7P0b97yD). At least, it takes
59
+ about 6 months to learn it, and also need to learn general things that exist in other programming languages.
@@ -19,6 +19,10 @@ language was created as a relatively complex project. Using Python as the founda
19
19
  understand syntax makes it easy to understand how the language is built without having to understand complex
20
20
  instructions like those in C, C++, and other low-level languages.
21
21
 
22
- To learn more about PyScript's syntax and packages, you can check out the
23
- [PyScript documentation here](https://azzammuhyala.github.io/pyscript) or see on
24
- [PyScript repository](https://github.com/azzammuhyala/pyscript).
22
+ To learn more about PyScript, you can see on [PyScript documentation here](https://azzammuhyala.github.io/pyscript) or
23
+ [PyScript repository](https://github.com/azzammuhyala/pyscript).
24
+
25
+ ## Behind it
26
+ This language created from based up on a
27
+ [YouTube tutorial](https://www.youtube.com/playlist?list=PLZQftyCk7_SdoVexSmwy_tBgs7P0b97yD). At least, it takes
28
+ about 6 months to learn it, and also need to learn general things that exist in other programming languages.
@@ -165,54 +165,6 @@ class PysParser(Pys):
165
165
 
166
166
  return result.success(assign_expr)
167
167
 
168
- def assign_expr(self):
169
- result = PysParserResult()
170
-
171
- variable = result.register(self.expr())
172
- if result.error:
173
- return result
174
-
175
- while self.current_token.type in (
176
- TOKENS['EQ'],
177
- TOKENS['EPLUS'],
178
- TOKENS['EMINUS'],
179
- TOKENS['EMUL'],
180
- TOKENS['EDIV'],
181
- TOKENS['EFDIV'],
182
- TOKENS['EMOD'],
183
- TOKENS['EAT'],
184
- TOKENS['EPOW'],
185
- TOKENS['EAND'],
186
- TOKENS['EOR'],
187
- TOKENS['EXOR'],
188
- TOKENS['ELSHIFT'],
189
- TOKENS['ERSHIFT']
190
- ):
191
- operand = (
192
- PysToken(
193
- TOKENS['EPOW'] if self.current_token.type == TOKENS['EXOR'] else TOKENS['EXOR'],
194
- self.current_token.position,
195
- 'reversed'
196
- )
197
- if
198
- self.flags & REVERSE_POW_XOR and
199
- self.current_token.type in (TOKENS['EPOW'], TOKENS['EXOR'])
200
- else
201
- self.current_token
202
- )
203
-
204
- result.register_advancement()
205
- self.advance()
206
- self.skip_expr(result)
207
-
208
- value = result.register(self.assign_expr(), True)
209
- if result.error:
210
- return result
211
-
212
- variable = PysAssignNode(variable, operand, value)
213
-
214
- return result.success(variable)
215
-
216
168
  def expr(self):
217
169
  if self.current_token.match(TOKENS['KEYWORD'], KEYWORDS['func']):
218
170
  return self.func_expr()
@@ -762,6 +714,54 @@ class PysParser(Pys):
762
714
  )
763
715
  )
764
716
 
717
+ def assign_expr(self):
718
+ result = PysParserResult()
719
+
720
+ variable = result.register(self.expr())
721
+ if result.error:
722
+ return result
723
+
724
+ while self.current_token.type in (
725
+ TOKENS['EQ'],
726
+ TOKENS['EPLUS'],
727
+ TOKENS['EMINUS'],
728
+ TOKENS['EMUL'],
729
+ TOKENS['EDIV'],
730
+ TOKENS['EFDIV'],
731
+ TOKENS['EMOD'],
732
+ TOKENS['EAT'],
733
+ TOKENS['EPOW'],
734
+ TOKENS['EAND'],
735
+ TOKENS['EOR'],
736
+ TOKENS['EXOR'],
737
+ TOKENS['ELSHIFT'],
738
+ TOKENS['ERSHIFT']
739
+ ):
740
+ operand = (
741
+ PysToken(
742
+ TOKENS['EPOW'] if self.current_token.type == TOKENS['EXOR'] else TOKENS['EXOR'],
743
+ self.current_token.position,
744
+ 'reversed'
745
+ )
746
+ if
747
+ self.flags & REVERSE_POW_XOR and
748
+ self.current_token.type in (TOKENS['EPOW'], TOKENS['EXOR'])
749
+ else
750
+ self.current_token
751
+ )
752
+
753
+ result.register_advancement()
754
+ self.advance()
755
+ self.skip_expr(result)
756
+
757
+ value = result.register(self.assign_expr(), True)
758
+ if result.error:
759
+ return result
760
+
761
+ variable = PysAssignNode(variable, operand, value)
762
+
763
+ return result.success(variable)
764
+
765
765
  def from_expr(self):
766
766
  result = PysParserResult()
767
767
  position = self.current_token.position
@@ -947,41 +947,6 @@ class PysParser(Pys):
947
947
 
948
948
  return result.success(PysIfNode(cases[0], cases[1], position))
949
949
 
950
- def elif_expr(self):
951
- return self.if_expr_cases(KEYWORDS['elif'])
952
-
953
- def else_expr(self):
954
- result = PysParserResult()
955
-
956
- if self.current_token.match(TOKENS['KEYWORD'], KEYWORDS['else']):
957
- result.register_advancement()
958
- self.advance()
959
- self.skip(result)
960
-
961
- else_body = result.register(self.stateblock(), True)
962
- if result.error:
963
- return result
964
-
965
- return result.success(else_body)
966
-
967
- return result.success(None)
968
-
969
- def elif_or_else_expr(self):
970
- result = PysParserResult()
971
-
972
- if self.current_token.match(TOKENS['KEYWORD'], KEYWORDS['elif']):
973
- all_cases = result.register(self.elif_expr())
974
- if result.error:
975
- return result
976
-
977
- return result.success(all_cases)
978
-
979
- else_body = result.register(self.else_expr())
980
- if result.error:
981
- return result
982
-
983
- return result.success(([], else_body))
984
-
985
950
  def if_expr_cases(self, case_keyword):
986
951
  result = PysParserResult()
987
952
  cases, else_body = [], None
@@ -1008,12 +973,32 @@ class PysParser(Pys):
1008
973
  advance_count = self.skip(result)
1009
974
 
1010
975
  if self.current_token.matches(TOKENS['KEYWORD'], (KEYWORDS['elif'], KEYWORDS['else'])):
1011
- all_cases = result.register(self.elif_or_else_expr())
1012
- if result.error:
1013
- return result
1014
976
 
1015
- new_cases, else_body = all_cases
1016
- cases.extend(new_cases)
977
+ if self.current_token.match(TOKENS['KEYWORD'], KEYWORDS['elif']):
978
+ all_cases = result.register(self.if_expr_cases(KEYWORDS['elif']))
979
+ if result.error:
980
+ return result
981
+
982
+ new_cases, else_body = all_cases
983
+ cases.extend(new_cases)
984
+
985
+ elif self.current_token.match(TOKENS['KEYWORD'], KEYWORDS['else']):
986
+ result.register_advancement()
987
+ self.advance()
988
+ self.skip(result)
989
+
990
+ if self.current_token.match(TOKENS['KEYWORD'], KEYWORDS['if']):
991
+ all_cases = result.register(self.if_expr_cases(KEYWORDS['if']))
992
+ if result.error:
993
+ return result
994
+
995
+ new_cases, else_body = all_cases
996
+ cases.extend(new_cases)
997
+
998
+ else:
999
+ else_body = result.register(self.stateblock(), True)
1000
+ if result.error:
1001
+ return result
1017
1002
 
1018
1003
  else:
1019
1004
  self.reverse(advance_count)
@@ -1056,49 +1041,44 @@ class PysParser(Pys):
1056
1041
 
1057
1042
  return result.success(PysSwitchNode(target, cases[0], cases[1], position))
1058
1043
 
1059
- def case_expr(self):
1044
+ def case_or_default_expr(self):
1060
1045
  result = PysParserResult()
1061
- cases, default_case = [], None
1062
-
1063
- if not self.current_token.match(TOKENS['KEYWORD'], KEYWORDS['case']):
1064
- return result.failure(self.error("expected {!r}".format(KEYWORDS['case'])))
1065
-
1066
- result.register_advancement()
1067
- self.advance()
1068
- self.skip(result)
1069
-
1070
- case = result.register(self.expr(), True)
1071
- if result.error:
1072
- return result
1046
+ cases, default_body = [], None
1073
1047
 
1074
- self.skip(result)
1048
+ if self.current_token.match(TOKENS['KEYWORD'], KEYWORDS['case']):
1049
+ result.register_advancement()
1050
+ self.advance()
1051
+ self.skip(result)
1075
1052
 
1076
- if self.current_token.type != TOKENS['COLON']:
1077
- return result.failure(self.error("expected ':'"))
1053
+ case = result.register(self.expr(), True)
1054
+ if result.error:
1055
+ return result
1078
1056
 
1079
- result.register_advancement()
1080
- self.advance()
1057
+ self.skip(result)
1081
1058
 
1082
- body = result.register(self.statements())
1083
- if result.error:
1084
- return result
1059
+ if self.current_token.type != TOKENS['COLON']:
1060
+ return result.failure(self.error("expected ':'"))
1085
1061
 
1086
- cases.append((case, body))
1062
+ result.register_advancement()
1063
+ self.advance()
1087
1064
 
1088
- if self.current_token.matches(TOKENS['KEYWORD'], (KEYWORDS['case'], KEYWORDS['default'])):
1089
- all_cases = result.register(self.case_or_default_expr())
1065
+ body = result.register(self.statements())
1090
1066
  if result.error:
1091
1067
  return result
1092
1068
 
1093
- new_cases, default_case = all_cases
1094
- cases.extend(new_cases)
1069
+ cases.append((case, body))
1095
1070
 
1096
- return result.success((cases, default_case))
1071
+ self.skip(result)
1097
1072
 
1098
- def default_expr(self):
1099
- result = PysParserResult()
1073
+ if self.current_token.matches(TOKENS['KEYWORD'], (KEYWORDS['case'], KEYWORDS['default'])):
1074
+ all_cases = result.register(self.case_or_default_expr())
1075
+ if result.error:
1076
+ return result
1077
+
1078
+ new_cases, default_body = all_cases
1079
+ cases.extend(new_cases)
1100
1080
 
1101
- if self.current_token.match(TOKENS['KEYWORD'], KEYWORDS['default']):
1081
+ elif self.current_token.match(TOKENS['KEYWORD'], KEYWORDS['default']):
1102
1082
  result.register_advancement()
1103
1083
  self.advance()
1104
1084
  self.skip(result)
@@ -1109,29 +1089,11 @@ class PysParser(Pys):
1109
1089
  result.register_advancement()
1110
1090
  self.advance()
1111
1091
 
1112
- body = result.register(self.statements())
1113
- if result.error:
1114
- return result
1115
-
1116
- return result.success(body)
1117
-
1118
- return result.success(None)
1119
-
1120
- def case_or_default_expr(self):
1121
- result = PysParserResult()
1122
-
1123
- if self.current_token.match(TOKENS['KEYWORD'], KEYWORDS['case']):
1124
- all_cases = result.register(self.case_expr())
1092
+ default_body = result.register(self.statements())
1125
1093
  if result.error:
1126
1094
  return result
1127
1095
 
1128
- return result.success(all_cases)
1129
-
1130
- default_body = result.register(self.default_expr())
1131
- if result.error:
1132
- return result
1133
-
1134
- return result.success(([], default_body))
1096
+ return result.success((cases, default_body))
1135
1097
 
1136
1098
  def try_expr(self):
1137
1099
  result = PysParserResult()
@@ -1240,6 +1202,8 @@ class PysParser(Pys):
1240
1202
  parenthesis = True
1241
1203
  left_parenthesis_token = self.current_token
1242
1204
 
1205
+ self.parenthesis_level += 1
1206
+
1243
1207
  result.register_advancement()
1244
1208
  self.advance()
1245
1209
  self.skip(result)
@@ -1247,10 +1211,6 @@ class PysParser(Pys):
1247
1211
  else:
1248
1212
  parenthesis = False
1249
1213
 
1250
- self.parenthesis_level += 1
1251
-
1252
- init_token_position = self.current_token.position
1253
-
1254
1214
  init = result.try_register(self.assign_expr())
1255
1215
  if result.error:
1256
1216
  return result
@@ -1283,7 +1243,7 @@ class PysParser(Pys):
1283
1243
 
1284
1244
  elif self.current_token.match(TOKENS['KEYWORD'], KEYWORDS['of']):
1285
1245
  if init is None:
1286
- return result.failure(self.error("expected expression", init_token_position))
1246
+ return result.failure(self.error("expected expression"))
1287
1247
 
1288
1248
  foreach = True
1289
1249
 
@@ -1295,20 +1255,22 @@ class PysParser(Pys):
1295
1255
  if result.error:
1296
1256
  return result
1297
1257
 
1258
+ elif init is None:
1259
+ return result.failure(self.error("expected expression or ';'"))
1260
+
1298
1261
  else:
1299
- return result.failure(self.error("expected assign expression or ';'"))
1262
+ return result.failure(self.error("expected '{}' or ';'".format(KEYWORDS['of'])))
1300
1263
 
1301
1264
  self.skip(result)
1302
1265
 
1303
1266
  if parenthesis:
1304
-
1305
1267
  self.close_parenthesis(result, left_parenthesis_token)
1306
1268
  if result.error:
1307
1269
  return result
1308
1270
 
1309
- self.skip(result)
1271
+ self.parenthesis_level -= 1
1310
1272
 
1311
- self.parenthesis_level -= 1
1273
+ self.skip(result)
1312
1274
 
1313
1275
  body = result.try_register(self.stateblock())
1314
1276
  if result.error:
@@ -313,7 +313,7 @@ def pys_shell(symbol_table=None, flags=DEFAULT):
313
313
 
314
314
  except KeyboardInterrupt:
315
315
  reset_next_line()
316
- print('\rKeyboardInterrupt. Type "exit" or "!exit" to exit the program.', file=sys.stderr)
316
+ print('\rKeyboardInterrupt. Type "exit" or "!exit" to exit.', file=sys.stderr)
317
317
 
318
318
  except EOFError:
319
319
  return 0
@@ -0,0 +1,5 @@
1
+ __version__ = '1.3.1'
2
+ __date__ = '26 October 2025, 14:00 UTC+7'
3
+
4
+ version = '{} ({})'.format(__version__, __date__)
5
+ version_info = None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyscript-programming-language
3
- Version: 1.3.0
3
+ Version: 1.3.1
4
4
  Summary: PyScript Programming Language
5
5
  Home-page: https://github.com/azzammuhyala/pyscript
6
6
  Author: azzammuhyala
@@ -50,6 +50,10 @@ language was created as a relatively complex project. Using Python as the founda
50
50
  understand syntax makes it easy to understand how the language is built without having to understand complex
51
51
  instructions like those in C, C++, and other low-level languages.
52
52
 
53
- To learn more about PyScript's syntax and packages, you can check out the
54
- [PyScript documentation here](https://azzammuhyala.github.io/pyscript) or see on
53
+ To learn more about PyScript, you can see on [PyScript documentation here](https://azzammuhyala.github.io/pyscript) or
55
54
  [PyScript repository](https://github.com/azzammuhyala/pyscript).
55
+
56
+ ## Behind it
57
+ This language created from based up on a
58
+ [YouTube tutorial](https://www.youtube.com/playlist?list=PLZQftyCk7_SdoVexSmwy_tBgs7P0b97yD). At least, it takes
59
+ about 6 months to learn it, and also need to learn general things that exist in other programming languages.
@@ -5,7 +5,7 @@ with open('README.md', 'r', encoding='utf-8') as file:
5
5
 
6
6
  setup(
7
7
  name='pyscript-programming-language',
8
- version='1.3.0',
8
+ version='1.3.1',
9
9
  description='PyScript Programming Language',
10
10
  long_description=long_description,
11
11
  long_description_content_type='text/markdown',
@@ -1,5 +0,0 @@
1
- __version__ = '1.3.0'
2
- __date__ = '25 October 2025, 17:00 UTC+7'
3
-
4
- version = '{} ({})'.format(__version__, __date__)
5
- version_info = None