
Wir schreiben unsere "Programmiersprache" in Python3
1. Lexer
In diesem Artikel werden wir sozusagen python2 erstellen, Variablen erstellen und an die Konsole ausgeben
Wenn es um dich geht, werde ich Teil 2 des Beitrags machen: D.
Lassen Sie uns zunächst den Namen der Sprache bestimmen - zum Beispiel „xnn“. Erstellen Sie nun die Datei xnn.py und schreiben Sie dort den Hauptcode: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)
Was machen wir:- Importieren Sie die Betriebssystem- und Systembibliotheken
- Mit os bestimmen wir, von wo aus der Compiler gestartet wird (in Zukunft werde ich Ihnen sagen, warum)
- Erstellen Sie den Pfad zur Datei und nehmen Sie die Datei selbst aus dem Argument - wir erhalten sie über sys.argv
- Als nächstes zeigen wir den Pfad selbst mit der Datei an (in Zukunft muss sie gelöscht werden).
- Wir erstellen alle reservierten Wörter - im Moment brauchen wir sie nicht, aber in Zukunft haben wir sie für Fehler
- Erstellen Sie Listen für Lexer und Variablen
- Wir erstellen den Lexer selbst, dafür öffnen wir die Datei im Lesemodus, achten Sie darauf
encoding = "UTF-8"
Wenn dies nicht getan wird, gibt es anstelle russischer Buchstaben Hieroglyphen! - Mit ex in read (). Split () verteilen wir den gesamten Text in Wörter und setzen jedes Wort separat in ex
- Als nächstes schreiben Sie jedes Wort in die Var- Liste
- Und wir werden die Liste selbst anzeigen - in Zukunft wird es notwendig sein, die Ausgabe zu entfernen: /
Erstellen einer .xnn-Datei
Jetzt erstellen wir die Datei selbst, die wir analysieren, und ändern auch die Art des Öffnens.
Öffnen Sie sie und schreiben Sie sie dort:pr =
rprint pr
2. Erstellen eines Compilers
Erstellen Sie jetzt einen Compiler!Dazu ergänzen wir unsere Datei mit Code, so dass es folgendermaßen aussieht: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! !')
Was machen wir?Wir durchlaufen alle Werte in var und wenn wir das eine oder andere reservierte Wort finden, führen wir bestimmte Aktionen ausVariablenzuordnung
Wenn i mit "=" übereinstimmt, fügen Sie der vars_- Liste einen Wert hinzu , vor "=" als Schlüssel und nach "=" als Wert, und bilden Sie so eine VariableVariable Ausgabe
Wenn ich mit "rprint" übereinstimme, suchen wir in der vars_- Liste nach einer Übereinstimmung für diese Variable, die wir über unseren Freund, die var- Liste, erhalten.Zeigen Sie nach dem Auffinden den Wert der Variablen anIn Aktion arbeiten
Geben Sie die Befehlsdaten in cmd ein, um die Datei zu kompilieren:cd path/to/files
python xnn.py prog.xnn
Die Ausgabe ist:
C:\Users\Hoopengo\Desktop\xnn\prog.xnn
['pr', '=', '', 'rprint', 'pr']
3. Kompilierung in .exe
Erstellen Sie eine Kopie des Dateiordners und bearbeiten Sie die Datei xnn.py.import 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! !')
Auto-py-to-exeinstallieren Vollständige Installationsinformationen finden Sie unter diesem Link.Geben Sie die Konsole ein:Auto-Py-to-Exepip install auto-py-to-exe
auto-py-to-exe
Der Browser startet. Wählen Sie dort den Pfad zur Datei und eine Datei.
4. Erstellen eines Installationsprogramms
Erstellen Sie im kopierten Ordner die Datei 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)
Kompilieren Sie es anschließend in .exe und legen Sie es in demselben Verzeichnis ab. Es sollte folgendermaßen aussehen:
5. Installation
Jetzt installieren.Öffnen Sie dazu die Datei bat.exe. Anschließend wird die Installation durchgeführt.Starten Sie die Konsole neu und geben Sie Folgendes ein:cd path/to/file
xnn prog.xnn
Und wir bekommen:
Wenn "xnn ist kein interner Befehl" angezeigt wird, fügen Sie die Datei "xnn.exe" selbst zum Ordner "C: \ Windows \ System32 \" hinzu.