
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
import os
dir = os.path.abspath(os.curdir)
p = str(dir) + '\\' + str(sys.argv[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)
print(var)
Apa yang kita lakukan:- Impor perpustakaan os dan sistem
- Menggunakan os, kami menentukan dari mana kompiler diluncurkan (di masa depan saya akan memberi tahu Anda alasannya)
- Buat path ke file + ambil file itu sendiri dari argumen - kita mendapatkannya melalui sys.argv
- Selanjutnya, kami menampilkan path itu sendiri, dengan file (di masa depan itu harus dihapus)
- Kami membuat semua kata yang dipesan - untuk saat ini, kami tidak membutuhkannya, tetapi di masa mendatang kami mendapatkannya untuk hasil kesalahan
- Buat daftar untuk lexer dan variabel
- 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! - Menggunakan untuk ex in read (). Split () kami mendistribusikan semua teks menjadi kata-kata dan menempatkan setiap kata secara terpisah di ex
- Selanjutnya, tulis setiap kata dalam daftar var
- 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
import os
dir = os.path.abspath(os.curdir)
p = str(dir) + '\\' + str(sys.argv[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)
print(var)
a = -1
for i in var:
a = a + 1
if i == '=':
vars_[var[a-1]] = var[a+1]
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 tertentuTugas variabel
Jika saya bertepatan dengan "=", tambahkan nilai ke daftar vars_ , sebelum "=" sebagai kunci, dan setelah "=" sebagai nilai - dengan demikian membentuk variabelOutput 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 variabelBekerja 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.pyimport sys
import os
dir = os.path.abspath(os.curdir)
p = str(dir) + '\\' + str(sys.argv[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)
a = -1
for i in var:
a = a + 1
if i == '=':
vars_[var[a-1]] = var[a+1]
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-exeInformasi instalasi lengkap tersedia di tautan ini .Mari masuk ke konsol:auto-py-to-exepip install auto-py-to-exe
auto-py-to-exe
Browser mulai. Pilih jalur ke file dan Satu File di sana.
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 \".