Wie erstelle ich eine Python-Programmiersprache?



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

Was machen wir:

  1. Importieren Sie die Betriebssystem- und Systembibliotheken
  2. Mit os bestimmen wir, von wo aus der Compiler gestartet wird (in Zukunft werde ich Ihnen sagen, warum)
  3. Erstellen Sie den Pfad zur Datei und nehmen Sie die Datei selbst aus dem Argument - wir erhalten sie über sys.argv
  4. Als nächstes zeigen wir den Pfad selbst mit der Datei an (in Zukunft muss sie gelöscht werden).
  5. Wir erstellen alle reservierten Wörter - im Moment brauchen wir sie nicht, aber in Zukunft haben wir sie für Fehler
  6. Erstellen Sie Listen für Lexer und Variablen
  7. 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!
  8. Mit ex in read (). Split () verteilen wir den gesamten Text in Wörter und setzen jedes Wort separat in ex
  9. Als nächstes schreiben Sie jedes Wort in die Var- Liste
  10. 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 #  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!   !')

Was machen wir?

Wir durchlaufen alle Werte in var und wenn wir das eine oder andere reservierte Wort finden, führen wir bestimmte Aktionen aus

Variablenzuordnung


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 Variable

Variable 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 an

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

Auto-py-to-exe
installieren Vollständige Installationsinformationen finden Sie unter diesem Link.

Geben Sie die Konsole ein:

Auto-Py-to-Exe
pip install auto-py-to-exe
auto-py-to-exe


Der Browser startet. Wählen Sie dort den Pfad zur Datei und eine Datei.


Mein Preset


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.

All Articles