Como criar uma linguagem de programação Python?



Nós escrevemos nossa "linguagem de programação" em Python3


1. Lexer


Neste artigo, vamos fazer, por assim dizer, python2, criar variáveis, enviá-las para o console


Se vier a você, eu farei a parte 2 do post: D

Para começar,
vamos determinar o nome do idioma - por exemplo, "xnn". Agora crie o arquivo xnn.py e escreva o código principal:

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) # $   $

O que estamos fazendo:

  1. Importar as bibliotecas os e sys
  2. Usando o os, determinamos de onde o compilador é iniciado (no futuro, vou lhe dizer por que)
  3. Crie o caminho para o arquivo + retire o próprio arquivo do argumento - nós o obtemos através do sys.argv
  4. Em seguida, exibimos o próprio caminho, com o arquivo (no futuro, ele precisará ser excluído)
  5. Criamos todas as palavras reservadas - por enquanto, não precisamos delas, mas, no futuro, obteremos a saída de erro
  6. Crie listas para lexer e variáveis
  7. Criamos o próprio lexer, para isso, abrimos o arquivo, no modo de leitura, certifique-se de
    codificação = "UTF-8"
    se isso não for feito, em vez de letras russas, haverá hieróglifos!
  8. Usando for ex em read (). Split (), distribuímos todo o texto em palavras e colocamos cada palavra separadamente em ex
  9. Em seguida, escreva cada palavra na lista var
  10. E exibiremos a lista em si - no futuro será necessário remover a saída: /


Criando um arquivo .xnn


Agora vamos criar o próprio arquivo que iremos analisar e também mudar a maneira de abrir,



abra-o e escreva-o:

pr = 
rprint pr

2. Criando um compilador


Agora crie um compilador!
Para fazer isso, complementamos nosso arquivo com código para que fique assim:

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!   !')

O que estamos fazendo?

Nós iteramos sobre todos os valores em var e, quando encontramos uma ou outra palavra reservada, realizamos determinadas ações

Atribuição variável


Se i corresponder "=", adicione um valor à lista vars_ , antes de "=" como chave e depois de "=" como valor, formando assim uma variável

Saída variável


Se eu corresponder a "rprint", procuramos na lista vars_ uma correspondência para essa variável, que obtemos através do nosso amigo, a lista var .
Depois de encontrar, mostre o valor da variável

Trabalho em ação


Para compilar o arquivo, insira os dados do comando no cmd:

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

A saída é:


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


3. Compilação em .exe


Crie uma cópia da pasta do arquivo e edite o arquivo 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
Informações completas sobre instalação estão disponíveis neste link.Entre

no console:

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


O navegador inicia. Escolha o caminho para o arquivo e um arquivo lá.


Minha predefinição


4. Criando um instalador


Na pasta copiada, crie o arquivo 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)

Depois disso, compile-o em .exe e solte-o no mesmo diretório, deve ficar assim:


5. Instalação


Agora
instale.Para fazer isso, abra o arquivo bat.exe, após o qual a instalação será concluída.
Reinicie o console e digite:

cd path/to/file
xnn prog.xnn

E temos:



Se aparecer "xnn não é um comando interno", adicione o arquivo xnn.exe à pasta "C: \ Windows \ System32 \".

All Articles