Bagaimana cara membuat bahasa pemrograman Python?



Kami menulis "bahasa pemrograman" dengan Python3


1. Lexer


Pada artikel ini kita akan melakukan, sehingga untuk berbicara, python2, membuat variabel, mengeluarkannya ke konsol


Jika itu datang kepada Anda, maka saya akan melakukan bagian 2 dari posting: D

Untuk mulai dengan,
mari kita tentukan nama bahasa - misalnya, "xnn". Sekarang buat file xnn.py dan tulis kode utama di sana:

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

Apa yang kita lakukan:

  1. Impor perpustakaan os dan sistem
  2. Menggunakan os, kami menentukan dari mana kompiler diluncurkan (di masa depan saya akan memberi tahu Anda alasannya)
  3. Buat path ke file + ambil file itu sendiri dari argumen - kita mendapatkannya melalui sys.argv
  4. Selanjutnya, kami menampilkan path itu sendiri, dengan file (di masa depan itu harus dihapus)
  5. Kami membuat semua kata yang dipesan - untuk saat ini, kami tidak membutuhkannya, tetapi di masa mendatang kami mendapatkannya untuk hasil kesalahan
  6. Buat daftar untuk lexer dan variabel
  7. Kami membuat lexer itu sendiri, untuk ini kami membuka file, dalam mode baca, pastikan untuk
    encoding = "UTF-8"
    jika ini tidak dilakukan, maka alih-alih huruf Rusia, akan ada hieroglif!
  8. Menggunakan untuk ex in read (). Split () kami mendistribusikan semua teks menjadi kata-kata dan menempatkan setiap kata secara terpisah di ex
  9. Selanjutnya, tulis setiap kata dalam daftar var
  10. Dan kami akan menampilkan daftar itu sendiri - di masa depan akan perlu untuk menghapus output: /


Membuat File .xnn


Sekarang kita akan membuat file itu sendiri yang akan kita parse, dan juga mengubah cara membuka.



Buka dan tulis di sana:

pr = 
rprint pr

2. Membuat Kompiler


Sekarang buat kompiler!
Untuk melakukan ini, kami melengkapi file kami dengan kode sehingga ternyata seperti ini:

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

Apa yang kita lakukan?

Kami mengulangi semua nilai dalam var dan ketika kami menemukan satu atau beberapa kata cadangan, kami melakukan tindakan tertentu

Tugas variabel


Jika saya bertepatan dengan "=", tambahkan nilai ke daftar vars_ , sebelum "=" sebagai kunci, dan setelah "=" sebagai nilai - dengan demikian membentuk variabel

Output variabel


Jika saya cocok dengan "rprint", kami melihat daftar vars_ untuk kecocokan untuk variabel ini, yang kami dapatkan melalui teman kami, daftar var .
Setelah menemukan, tampilkan nilai variabel

Bekerja dalam aksi


Untuk mengkompilasi file, masukkan data perintah dalam cmd:

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

Outputnya adalah:


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


3. Kompilasi dalam .exe


Buat salinan folder file dan edit file 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!   !')

Instal auto-py-to-exe
Informasi instalasi lengkap tersedia di tautan ini .

Mari masuk ke konsol:

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


Browser mulai. Pilih jalur ke file dan Satu File di sana.


Preset saya


4. Membuat installer


Di folder yang disalin, buat file 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)

Setelah itu, kompilasi ke .exe dan letakkan di direktori yang sama, akan terlihat seperti ini:


5. Instalasi


Sekarang instal.
Untuk melakukan ini, buka file bat.exe, setelah itu instalasi akan dilakukan.
Restart konsol dan masukkan:

cd path/to/file
xnn prog.xnn

Dan kita mendapatkan:



Jika dikatakan "xnn bukan perintah internal", maka tambahkan sendiri file xnn.exe ke folder "C: \ Windows \ System32 \".

All Articles