py-to-js

Intérprete de script de Python simple en JS


¡Hola! En general, tengo 14 años, tomé en cuenta todos los descuidos pasados ​​y, por lo tanto, vuelvo a intentarlo. El intérprete está escrito en Python ╕


Github - github.com/hoopengo/py-to-js


En lo que estoy trabajando:

1. py-to-js
2. ryno
3. Editor de código

Para empezar, diré de inmediato que este es un código incompleto con un nombre de variable tonto, errores, etc. Ahora vamos, cree un archivo interp.pyu otra cosa y escriba esto allí:

pyfile = open('testpy.py', 'r', encoding = 'UTF-8')
count = -1
with open('open.js', 'w', encoding = 'UTF-8') as f:
	py = pyfile.readlines()
	cc, c, tab, local = 1, 0, 0, 0
	variables = []
	f.write('"use strict";' + '\n' * 2)
	f.write('''// Thanks for using py-to-js
// I develop this with hearth''' + '\n' * 2)
	for num in py:
		count += 1
		tab = py[count].count('\t')
		# basic concepts
		if '=' in num and not 'print' in num and not '==' in num and not '!=' in num:
			name = num.replace('\n', '')
			let = 'let '
			if name.startswith('\t'):
				let = '\tlet '
				name = name.replace('\t', '')
			if name in variables:
				let = ''
			variables.append(name)
			f.write( let + f"{name}" + ';' + '\n' * 2)
		elif 'if' in num:
			condition = num.replace('\n', '').replace('if', '').replace(':', '')
			if_ = 'if '
			if condition.startswith('\t'):
				condition = condition.replace('\t', '')
				if_ = '\tif '
				cc += 1
			else:
				cc = 1
			f.write( if_ + '(' + f'{condition}' + ' )' + ' {' + '\n')
		elif 'def' in num:
			con = num.replace('\n', '').replace('def', '').replace(':', '')
			def_ = 'function'
			if con.startswith('\t'):
				con = condition.replace('\t', '')
				def_ = '\tfunction'
				cc += 1
			else:
				cc = 1
			f.write( def_  + f'{con}' + ' {' + '\n')
		# basic commands
		elif 'print' in num:
			command = num.replace('\n', '')
			if command.startswith('\t'):
				command = command.replace('\t', '')
			f.write('\t' + f'{ command.replace("print", "console.log")}'+ ';' + '\n')
		try:
			if py[count + 1].count('\t') < tab and py[count + 1] != '\n':
				if local == 0:
					f.write('}' + '\n')
					c += 1
				elif local > 0:
					f.write('}' * local + '\n')
					c += 1 * local
					local = 0
			elif py[count + 1].count('\t') >= tab and py[count + 1].count('\t') != 0 and py[count + 1] != '\n':
				if 'def' in py[count + 1] or 'if' in py[count + 1]:
					local += 1
		except:
			pass
		try:
			if '\t' in py[count] and not '\t' in py[count + 1] and py[count + 1] != '\n':
				f.write('}' * (cc - c) + '\n' * 2)
				c = 0
		except:
			f.write('}' * (cc - c))
			c = 0
print('''Programm has been compiled..
1.def tests
2.add class''')

Por ahora, solo para la prueba, escribiremos un archivo estático en el campo abierto. Para aquellos que no entienden lo que está escrito aquí, puedo explicarlo en los comentarios. Por cierto, al final escribí lo que creo que debería repararse en el primer turno, y solo luego terminaré la creación de variables, etc. Si este código puede caber en un número menor de líneas, escriba los comentarios. Crea un testpy.pyscript y pon esto en él:

i = 0
b = 0
c = 0
if i == 0:
	print('i = 0')
	if b == 0:
		print('b = 0')
		if c == 0:
			print('c = 0')
	if b != 0:
		print('b != 0')
		if c != 0:
			print('c != 0')

Lanzamos nuestro under-py-to-js y obtenemos este resultado:

"use strict";

// Thanks for using py-to-js
// I develop this with hearth

let i = 0;

let b = 0;

let c = 0;

if (i == 0) {
    console.log('i = 0');
    if (b == 0) {
        console.log('b = 0');
        if (c == 0) {
            console.log('c = 0');
        }
    }
    if (b != 0) {
        console.log('b != 0');
        if (c != 0) {
            console.log('c != 0');
        }
    }
}

All Articles