rupython 1.2.0__py3-none-any.whl → 1.2.2__py3-none-any.whl
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.
- rupython/__main__.py +16 -2
- rupython//342/225/250/320/254/342/225/250/342/225/233/342/225/250/342/224/244/342/225/244/320/223/342/225/250/342/225/227/342/225/250/342/225/225//342/225/250/320/241/342/225/250/320/244.py +1 -1
- rupython//342/225/250/320/257/342/225/244/320/220/342/225/250/342/225/241/342/225/250/342/225/233/342/225/250/342/226/222/342/225/244/320/220/342/225/250/342/226/221/342/225/250/342/225/226/342/225/250/342/225/233/342/225/250/342/226/223/342/225/250/342/226/221/342/225/244/320/222/342/225/250/342/225/241/342/225/250/342/225/227/342/225/244/320/234.py +58 -2
- {rupython-1.2.0.dist-info → rupython-1.2.2.dist-info}/METADATA +4 -4
- rupython-1.2.2.dist-info/RECORD +12 -0
- rupython-1.2.0.dist-info/RECORD +0 -12
- {rupython-1.2.0.dist-info → rupython-1.2.2.dist-info}/LICENSE +0 -0
- {rupython-1.2.0.dist-info → rupython-1.2.2.dist-info}/WHEEL +0 -0
- {rupython-1.2.0.dist-info → rupython-1.2.2.dist-info}/top_level.txt +0 -0
rupython/__main__.py
CHANGED
@@ -7,10 +7,24 @@ import sys as Система
|
|
7
7
|
|
8
8
|
def Перехватчик_прерывания_клавиатурой(тип_исключения, значение, предыдущие_шаги):
|
9
9
|
if тип_исключения == KeyboardInterrupt: print('\nСработало прерывание клавиатурой.')
|
10
|
-
else: Система.__excepthook__(
|
10
|
+
else: Система.__excepthook__(тип_исключения, значение, предыдущие_шаги)
|
11
11
|
Система.excepthook = Перехватчик_прерывания_клавиатурой
|
12
12
|
|
13
13
|
Исходник = Преобразователь.Преобразовать_код(Путь_к_файлу)
|
14
14
|
if Исходник: Преобразователь.Запустить_код(Название_файла, Исходник, Путь_к_файлу)
|
15
15
|
|
16
|
-
|
16
|
+
def Ожидать_нажатие_клавиши(сообщение):
|
17
|
+
if ОС.name == 'nt':
|
18
|
+
import msvcrt
|
19
|
+
print('\n' + сообщение)
|
20
|
+
msvcrt.getch()
|
21
|
+
else:
|
22
|
+
import tty
|
23
|
+
import termios
|
24
|
+
print('\n' + сообщение)
|
25
|
+
fd = Система.stdin.fileno()
|
26
|
+
старые_настройки = termios.tcgetattr(fd)
|
27
|
+
try: tty.setraw(fd); Система.stdin.read(1)
|
28
|
+
finally: termios.tcsetattr(fd, termios.TCSADRAIN, старые_настройки)
|
29
|
+
|
30
|
+
Ожидать_нажатие_клавиши('=== Исполнение кода завершено. Нажмите любую клавишу для выхода. ===')
|
@@ -252,7 +252,7 @@ def Перевести_токены(токены):
|
|
252
252
|
for ключ, значение in Словарь_перевода.items():
|
253
253
|
if '___' in ключ:
|
254
254
|
шаблон = '^' + ключ.replace('___', r'(\S+)') + '$'
|
255
|
-
совпадение =
|
255
|
+
совпадение = РегВыр.match(шаблон, фраза)
|
256
256
|
if совпадение:
|
257
257
|
переменная = совпадение.group(1).upper()
|
258
258
|
if переменная in Словарь_перевода:
|
@@ -5,6 +5,7 @@ import os as ОС
|
|
5
5
|
import sys as Система
|
6
6
|
import importlib as Импортование
|
7
7
|
import re as РегВыр
|
8
|
+
from io import StringIO as СтроковыйВВ
|
8
9
|
|
9
10
|
Служебные_слова = {
|
10
11
|
'Да': 'True',
|
@@ -27,6 +28,7 @@ import re as РегВыр
|
|
27
28
|
'Пропустить': 'pass',
|
28
29
|
'Бросить': 'raise',
|
29
30
|
'Продолжить': 'continue',
|
31
|
+
'в': 'in',
|
30
32
|
'Если': 'if',
|
31
33
|
'АЕсли': 'elif',
|
32
34
|
'Иначе': 'else',
|
@@ -35,7 +37,6 @@ import re as РегВыр
|
|
35
37
|
'Для': 'for',
|
36
38
|
'из': 'in',
|
37
39
|
'для': 'for',
|
38
|
-
'в': 'in',
|
39
40
|
'Пока': 'while',
|
40
41
|
'Прервать': 'break',
|
41
42
|
'Попробовать': 'try',
|
@@ -362,6 +363,59 @@ def Заменить_встроенные_функции(слова, соотв
|
|
362
363
|
слова[сч] = (1, соответствие[1][слова[сч][1]], слова[сч][2])
|
363
364
|
сч += 1
|
364
365
|
|
366
|
+
def Обработать_f_строки(слова, путь_к_файлу):
|
367
|
+
номер = 0
|
368
|
+
while номер < len(слова):
|
369
|
+
if слова[номер][0] == 3 and слова[номер][1].startswith(("f'", 'f"')):
|
370
|
+
отступов = слова[номер][2]
|
371
|
+
исходная_строка = слова[номер][1]
|
372
|
+
префикс = 'f' if исходная_строка.startswith('f') else исходная_строка[0]
|
373
|
+
кавычка = исходная_строка[1]
|
374
|
+
содержимое = исходная_строка[2:-1] if исходная_строка.endswith(кавычка) else исходная_строка[2:]
|
375
|
+
новые_токены = []
|
376
|
+
поз = 0
|
377
|
+
while поз < len(содержимое):
|
378
|
+
if поз + 1 < len(содержимое) and содержимое[поз:поз+2] == '{{':
|
379
|
+
новые_токены.append((3, '{{', отступов))
|
380
|
+
поз += 2
|
381
|
+
elif поз + 1 < len(содержимое) and содержимое[поз:поз+2] == '}}':
|
382
|
+
новые_токены.append((3, '}}', отступов))
|
383
|
+
поз += 2
|
384
|
+
elif содержимое[поз] == '{':
|
385
|
+
уровень_скобок = 1
|
386
|
+
нач_поз = поз + 1
|
387
|
+
поз += 1
|
388
|
+
while поз < len(содержимое) and уровень_скобок > 0:
|
389
|
+
if содержимое[поз] == '{':
|
390
|
+
уровень_скобок += 1
|
391
|
+
elif содержимое[поз] == '}':
|
392
|
+
уровень_скобок -= 1
|
393
|
+
поз += 1
|
394
|
+
if уровень_скобок != 0:
|
395
|
+
искл = SyntaxError('Незакрытое выражение в f-строке')
|
396
|
+
Вывести_текст_исключения(искл, 'при разборе f-строки', путь_к_файлу)
|
397
|
+
выражение = содержимое[нач_поз:поз-1]
|
398
|
+
try:
|
399
|
+
токены_выражения = list(Разборщик_слов.generate_tokens(СтроковыйВВ(выражение).readline))
|
400
|
+
токены_выражения = [(ток.type, ток.string, отступов) for ток in токены_выражения if ток.type != Разборщик_слов.ENDMARKER]
|
401
|
+
Выполнить_основные_замены(токены_выражения, Служебные_слова)
|
402
|
+
Выполнить_основные_замены(токены_выражения, Специальные_названия)
|
403
|
+
Выполнить_основные_замены(токены_выражения, Исключения)
|
404
|
+
Заменить_встроенные_функции(токены_выражения, Встроенные_функции)
|
405
|
+
выражение_текст = Разборщик_слов.untokenize((ток[0], ток[1]) for ток in токены_выражения if ток[0] not in (4, 5, 6)).strip()
|
406
|
+
новые_токены.append((3, '{' + выражение_текст + '}', отступов))
|
407
|
+
except Exception as ошибка:
|
408
|
+
Вывести_текст_исключения(ошибка, 'при разборе выражения в f-строке', путь_к_файлу)
|
409
|
+
else:
|
410
|
+
нач_поз = поз
|
411
|
+
while поз < len(содержимое) and содержимое[поз] not in ['{', '}']:
|
412
|
+
поз += 1
|
413
|
+
if нач_поз != поз:
|
414
|
+
новые_токены.append((3, содержимое[нач_поз:поз], отступов))
|
415
|
+
новая_строка = f"f{кавычка}{''.join(ток[1] for ток in новые_токены)}{кавычка}"
|
416
|
+
слова[номер] = (3, новая_строка, отступов)
|
417
|
+
номер += 1
|
418
|
+
|
365
419
|
def Посчитать_номер_строки(слова, позиция):
|
366
420
|
переводов = 0
|
367
421
|
for сч in range(позиция):
|
@@ -466,7 +520,7 @@ def Преобразовать_код(путь_к_файлу):
|
|
466
520
|
слова = list(Прочитать_слова(файл.readline, путь_к_файлу))
|
467
521
|
if not Проверить_соответствие_слов(слова, путь_к_файлу): return
|
468
522
|
|
469
|
-
#
|
523
|
+
# Обрабатываем импорты
|
470
524
|
импорты = []
|
471
525
|
строки_импорта = []
|
472
526
|
for поз in [i for i, x in enumerate(слова) if x[1] == 'Подключить' or x[1] == 'подключить']:
|
@@ -492,10 +546,12 @@ def Преобразовать_код(путь_к_файлу):
|
|
492
546
|
импорты.append(импорт)
|
493
547
|
for импорт in импорты: Обработать_импорт(импорт, путь_к_файлу)
|
494
548
|
|
549
|
+
# Выполняем замены
|
495
550
|
Выполнить_основные_замены(слова, Служебные_слова)
|
496
551
|
Выполнить_основные_замены(слова, Специальные_названия)
|
497
552
|
Выполнить_основные_замены(слова, Исключения)
|
498
553
|
Заменить_встроенные_функции(слова, Встроенные_функции)
|
554
|
+
Обработать_f_строки(слова, путь_к_файлу)
|
499
555
|
|
500
556
|
# Обрабатываем цикл со счётчиком
|
501
557
|
сдвиг = 0
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: rupython
|
3
|
-
Version: 1.2.
|
3
|
+
Version: 1.2.2
|
4
4
|
Summary: Исполнитель кода Русского Питона
|
5
5
|
Description-Content-Type: text/markdown
|
6
6
|
License-File: LICENSE
|
@@ -144,7 +144,7 @@ k = l это m и m это не n
|
|
144
144
|
a, b = b, a + b
|
145
145
|
```
|
146
146
|
```
|
147
|
-
кв_ч = (сч ** 2 для сч
|
147
|
+
кв_ч = (сч ** 2 для сч из Ряд(1, 10))
|
148
148
|
```
|
149
149
|
|
150
150
|
##### Класс
|
@@ -187,10 +187,10 @@ k = l это m и m это не n
|
|
187
187
|
```
|
188
188
|
Попробовать:
|
189
189
|
ч = Цел(строка)
|
190
|
-
|
190
|
+
Перехватив ОшибкаЗначения:
|
191
191
|
Вывести('Ошибка.')
|
192
192
|
Иначе: Вывести('Сработало.')
|
193
|
-
|
193
|
+
Завершив: Вывести('Выполнено.')
|
194
194
|
|
195
195
|
Если Тип(x) != Стр:
|
196
196
|
Бросить ОшибкаЗначения
|
@@ -0,0 +1,12 @@
|
|
1
|
+
rupython/__main__.py,sha256=5CE287LA_5R1pXymB5T0r9pk5QD9meo4_qnQTbgvxKA,1719
|
2
|
+
rupython/__Заголовочный_код__.py,sha256=VWghfQc6dv9lwIeQvJotpdOlBtHZeN00NBeL4RdWloA,10998
|
3
|
+
rupython/Преобразователь.py,sha256=-0oxZb63T3s50sT-0jiH3cA4KqRs3qVpaGsfSyAb8TY,47550
|
4
|
+
rupython/Модули/БД.py,sha256=ypjYa-9s0wO1Y_nXRiyiS80F_TStRlsSHRpisBWMT4g,23957
|
5
|
+
rupython/Модули/Матем.py,sha256=d8ekm7GJreu7LJ9KmAKcTOciIUQ-VBI567BfK_QeLSc,3587
|
6
|
+
rupython/Модули/РегВыр.py,sha256=yeXYfeDF2qw4DSKVdZVSFInMUW52U7Nq_KOJKvm4XnM,6349
|
7
|
+
rupython/Модули/Случ.py,sha256=oeVdSdFVb4X_T-nX2P7NSIhise1zUPIS4lk7h-67XSg,2689
|
8
|
+
rupython-1.2.2.dist-info/LICENSE,sha256=iWzdt1wyTlK8qNSu7TzK8pjjIcCvLvWHycp7ACRcWEc,59
|
9
|
+
rupython-1.2.2.dist-info/METADATA,sha256=c7xdKMa8k7PQcFNS_fZ74jhoLFY1t5xqyL9s4h4RQdk,27473
|
10
|
+
rupython-1.2.2.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
|
11
|
+
rupython-1.2.2.dist-info/top_level.txt,sha256=GtXaS8JTsBm5hpQxxtQlrxK6rExvSAK_Cp44FrY4210,9
|
12
|
+
rupython-1.2.2.dist-info/RECORD,,
|
rupython-1.2.0.dist-info/RECORD
DELETED
@@ -1,12 +0,0 @@
|
|
1
|
-
rupython/__main__.py,sha256=fBgJ_gMHKBOIoZZIyLDecfjuOWxIwb5N0xEphsWUUvw,1183
|
2
|
-
rupython/__Заголовочный_код__.py,sha256=VWghfQc6dv9lwIeQvJotpdOlBtHZeN00NBeL4RdWloA,10998
|
3
|
-
rupython/Преобразователь.py,sha256=RXC5pMuBXJatwT_o7VjPBS0JzoRrqJlH1MxrR-eT7rw,42957
|
4
|
-
rupython/Модули/БД.py,sha256=ZgMDbvr7Q_oYY4qQVyOo7VaDjeSYRwdX8rn7Ur7SbR0,23947
|
5
|
-
rupython/Модули/Матем.py,sha256=d8ekm7GJreu7LJ9KmAKcTOciIUQ-VBI567BfK_QeLSc,3587
|
6
|
-
rupython/Модули/РегВыр.py,sha256=yeXYfeDF2qw4DSKVdZVSFInMUW52U7Nq_KOJKvm4XnM,6349
|
7
|
-
rupython/Модули/Случ.py,sha256=oeVdSdFVb4X_T-nX2P7NSIhise1zUPIS4lk7h-67XSg,2689
|
8
|
-
rupython-1.2.0.dist-info/LICENSE,sha256=iWzdt1wyTlK8qNSu7TzK8pjjIcCvLvWHycp7ACRcWEc,59
|
9
|
-
rupython-1.2.0.dist-info/METADATA,sha256=Mxwi8KhqluNStBJetUd8f9TQa84jjIGFXL12O0CNA0g,27473
|
10
|
-
rupython-1.2.0.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
|
11
|
-
rupython-1.2.0.dist-info/top_level.txt,sha256=GtXaS8JTsBm5hpQxxtQlrxK6rExvSAK_Cp44FrY4210,9
|
12
|
-
rupython-1.2.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|