¿Cómo crear un lenguaje de programación Python?



Escribimos nuestro "lenguaje de programación" en Python3


1. Lexer


En este artículo haremos, por así decirlo, python2, crearemos variables, las enviaremos a la consola


Si se trata de ti, entonces haré la parte 2 de la publicación: D

Para empezar, determinemos el nombre del idioma, por ejemplo, "xnn".
Ahora cree el archivo xnn.py y escriba el código principal allí:

import sys #  sys
import os #  os

dir = os.path.abspath(os.curdir) #   
p = str(dir) + '\\' + str(sys.argv[1]) #sys.argv[1] -  1 
print(p) #   +  
modules = ['if', 'else', 'while', 'for', '=', '==', '{', '}', '[', ']', '(', ')', '//'] #    
var = [] #   
vars_ = {} #   

with open(p, 'r', encoding="UTF-8") as f: #   
        for ex in f.read().split(): #  
            var.append(ex) #     var
    print(var) # $   $

Que estamos haciendo:

  1. Importar las bibliotecas os y sys
  2. Usando os, determinamos desde dónde se inicia el compilador (en el futuro le diré por qué)
  3. Cree la ruta al archivo + tome el archivo del argumento; lo obtenemos a través de sys.argv
  4. A continuación, mostramos la ruta en sí, con el archivo (en el futuro será necesario eliminarlo)
  5. Creamos todas las palabras reservadas; por ahora, no lo necesitamos, pero en el futuro lo tenemos para generar errores
  6. Crear listas para lexer y variables
  7. Creamos el lexer en sí, para esto abrimos el archivo, en modo de lectura, asegúrese de
    codificación = "UTF-8"
    Si esto no se hace, ¡en lugar de letras rusas, habrá jeroglíficos!
  8. Usando for ex en read (). Split () distribuimos todo el texto en palabras y colocamos cada palabra por separado en ex
  9. Luego, escribe cada palabra en la lista var
  10. Y mostraremos la lista en sí; en el futuro será necesario eliminar la salida: /


Crear un archivo .xnn


Ahora cree el archivo que analizaremos, y también cambie la forma de abrirlo.



Ábralo y escríbalo allí:

pr = 
rprint pr

2. Crear un compilador


¡Ahora crea un compilador!
Para hacer esto, complementamos nuestro archivo con código para que resulte así:

import sys #  sys
import os #  os

dir = os.path.abspath(os.curdir) #   
p = str(dir) + '\\' + str(sys.argv[1]) #sys.argv[1] -  1 
print(p) #   +  
modules = ['if', 'else', 'while', 'for', '=', '==', '{', '}', '[', ']', '(', ')', '//'] #    
var = [] #   
vars_ = {} #   
try:
    with open(p, 'r', encoding="UTF-8") as f: #   
        for ex in f.read().split(): #  
            var.append(ex) #     var
    print(var) # $   $
    a = -1 #     var
    for i in var: #  
        a = a + 1 #    
        if i == '=': #    "="
            vars_[var[a-1]] = var[a+1] #  vars_      "="
        if i == 'rprint':
            let = var[a+1]
            for key, value in vars_.items():
                if key == let:
                    print(value)
except FileNotFoundError:
    print('Error!   !')

¿Que estamos haciendo?

Repetimos todos los valores en var y cuando encontramos una u otra palabra reservada, realizamos ciertas acciones

Asignación variable


Si coincide con "=", agregue un valor a la lista vars_ , antes de "=" como clave y después de "=" como valor, formando así una variable

Salida variable


Si coincido con "rprint", buscamos en la lista vars_ una coincidencia para esta variable, que obtenemos a través de nuestro amigo, la lista var .
Después de buscar, muestra el valor de la variable

Trabajo en acción


Para compilar el archivo, ingrese los datos del comando en cmd:

cd path/to/files
python xnn.py prog.xnn

El resultado es:


C:\Users\Hoopengo\Desktop\xnn\prog.xnn
['pr', '=', '', 'rprint', 'pr']


3. Compilación en .exe


Cree una copia de la carpeta de archivos y edite el archivo xnn.py

import sys #  sys
import os #  os

dir = os.path.abspath(os.curdir) #   
p = str(dir) + '\\' + str(sys.argv[1]) #sys.argv[1] -  1 
modules = ['if', 'else', 'while', 'for', '=', '==', '{', '}', '[', ']', '(', ')', '//'] #    
var = [] #   
vars_ = {} #   
try:
    with open(p, 'r', encoding="UTF-8") as f: #   
        for ex in f.read().split(): #  
            var.append(ex) #     var
    a = -1 #     var
    for i in var: #  
        a = a + 1 #    
        if i == '=': #    "="
            vars_[var[a-1]] = var[a+1] #  vars_      "="
        if i == 'rprint':
            let = var[a+1]
            for key, value in vars_.items():
                if key == let:
                    print(value)
except FileNotFoundError:
    print('Error!   !')

Instalar auto-py-to-exe
La información de instalación completa está disponible en este enlace.

Ingresemos a la consola:

auto-py-to-exe
pip install auto-py-to-exe
auto-py-to-exe


El navegador se inicia. Elija la ruta al archivo y One File allí.


Mi preset


4. Crear un instalador


En la carpeta copiada, cree el archivo bat.py:



import os

with open('path\\xnn.exe', 'r', encoding='UTF-8') as f:
	lean = f.read()

	directory_folder = r"C:\\Windows\\System32\\xnn.exe"
	folder_path = os.path.dirname(directory_folder) #     

	if not os.path.exists(folder_path): #     
	    os.makedirs(folder_path)

	with open(directory_folder, 'w', encoding='UTF-8') as file: #    
	    file.write(lean)

Después de eso, compílelo en .exe y suéltelo en el mismo directorio, debería verse así:


5. Instalación


Ahora instale.
Para hacer esto, abra el archivo bat.exe, después de lo cual se realizará la instalación.
Reinicie la consola e ingrese:

cd path/to/file
xnn prog.xnn

Y obtenemos:



Si dice que "xnn no es un comando interno", agregue el archivo xnn.exe a la carpeta "C: \ Windows \ System32 \" usted mismo.

All Articles