Heim > Web-Frontend > CSS-Tutorial > Erstellen wir eine winzige Programmiersprache

Erstellen wir eine winzige Programmiersprache

William Shakespeare
Freigeben: 2025-03-13 11:18:10
Original
757 Leute haben es durchsucht

Erstellen wir eine winzige Programmiersprache

Möglicherweise sind Sie bereits mit einer oder mehreren Programmiersprachen vertraut. Aber haben Sie jemals darüber nachgedacht, wie Sie Ihre eigene Programmiersprache erstellen können? Ich meine:

Eine Programmiersprache ist eine Reihe von Regeln, die Strings in verschiedene Maschinencodeausgänge umwandeln.

Kurz gesagt, eine Programmiersprache ist nur eine Reihe vordefinierter Regeln. Um es nützlich zu machen, benötigen Sie etwas, das diese Regeln verstehen kann, z. B. Compiler , Dolmetscher usw. So können wir einfach einige Regeln definieren und dann, damit es funktioniert, ein Programm schreiben, das diese Regeln mit einer vorhandenen Programmiersprache verstehen kann, die zu unserem Dolmetscher wird.

Compiler

Der Compiler wandelt den Code in den Maschinencode um, den der Prozessor ausführen kann (z. B. ein C -Compiler).

Interpreter

Der Interpreter durchläuft die Programmlinie nach Zeile und führt jeden Befehl aus.

Willst du es versuchen? Lassen Sie uns eine super einfache Programmiersprache erstellen, die die Magenta -Ausgabe in der Konsole ausgibt. Wir nennen es Magenta .

Richten Sie unsere Programmiersprache ein

Ich werde Node.js verwenden, aber Sie können in jeder Sprache lernen und das Konzept bleibt gleich. Lassen Sie mich zunächst eine Index.js -Datei erstellen und richten Sie sie ein.

 Klasse Magenta {
  Konstruktor (Codes) {
    this.codes = codes;
  }
  laufen() {
    console.log (this.codes);
  }
}

// Derzeit speichern wir den Code in einer Zeichenfolgenvariablen namens "Codes" // später werden wir den Code aus der Datei const codes = "print" Hallo Welt "lesen
Drucken Sie "Hallo noch einmal" `;
const magenta = new Magenta (Codes);
Magenta.run ();
Nach dem Login kopieren

Was wir hier tun, ist eine Klasse namens Magenta. Diese Klasse definiert und initialisiert ein Objekt, das für die Aufzeichnung von Text in der Konsole mit einem beliebigen Text verantwortlich ist, den wir über die Codes -Variable angeben. Derzeit haben wir die Codes -Variablen direkt mit mehreren "Hallo" -Meldungen in der Datei definiert.

OK, jetzt müssen wir einen sogenannten lexikalischen Analysator erstellen.

Was ist ein lexikalischer Analysator?

OK, lass uns zuerst über Englisch sprechen. Bitte beachten Sie die folgenden Sätze:

Geht es dir gut?

Hier ist "Hallo" ein Gruß, "ein ergänzender Ton und" Sie "ein Personalpronomen. Wir haben am Ende ein Fragezeichen ("?"). Wir können jeden Satz oder jede Phrase in viele grammatikalische Komponenten wie diese unterteilen. Eine andere Möglichkeit, diese Teile zu unterscheiden, besteht darin, sie in kleine Noten zu teilen. Das Programm, das Text in Tags unterteilt, ist unser lexikalischer Analysator .

Da unsere Sprache sehr klein ist, hat sie nur zwei Arten von Tags mit jeweils einem Wert:

  1. Schlüsselwörter
  2. Saite

Wir können regelmäßige Ausdrücke verwenden, um Tags aus Codes zu extrahieren, aber die Leistung wird sehr langsam sein. Ein besserer Ansatz besteht darin, jedes Zeichen der Codezeichenfolge durchzuschleiten und das Tag zu erhalten. Erstellen wir also eine Tokenize -Methode in der Magenta -Klasse - dies wird unser lexikalischer Analysator sein.

Vollständiger Code `` javascript class Magenta { constructor(codes) { this.codes = codes; } tokenize() { const length = this.codes.length; // pos 用于跟踪当前位置/索引let pos = 0; let tokens = []; const BUILT_IN_KEYWORDS = ["print"]; // 变量/关键字允许的字符const varChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_"; while (pos <code>); } } return tokens; } parse(tokens) { const len = tokens.length; let pos = 0; while (pos ); ;

const codes = print "hello world" print "hello again" ;

### Definieren Sie Regeln und Syntax Wir möchten feststellen, ob unsere Code -Bestellung mit einer Regel oder einer Syntax übereinstimmt. Aber zuerst müssen wir definieren, was diese Regeln und Syntax sind. Da unsere Sprache sehr klein ist, hat sie nur eine einfache Syntax, nämlich das Druckenschlüsselwort, gefolgt von einer Zeichenfolge.
Nach dem Login kopieren

Schlüsselwort: Druckzeichenfolge

<code>因此,让我们创建一个解析方法,该方法循环遍历我们的标记,并查看我们是否形成了有效的语法。如果是这样,它将采取必要的措施。 ```javascript class Magenta { constructor(codes) { this.codes = codes; } tokenize() { /* tokenizer 的先前代码*/ } parse(tokens) { const len = tokens.length; let pos = 0; while (pos </code>
Nach dem Login kopieren

Sehen! Wir haben bereits eine Arbeitssprache!

Ok, aber den Code in eine Zeichenfolgenvariable zu legen macht nicht so Spaß. Lassen Sie uns also unseren Magenta -Code in eine Datei namens Code.M. Auf diese Weise können wir den Magenta -Code von der Compiler -Logik trennen. Wir verwenden .M als Dateierweiterung, um anzuzeigen, dass die Datei Code in unserer Sprache enthält.

Lassen Sie uns den Code aus dieser Datei lesen:

 // Dateisystemmodul const fs = required ('fs');
// Das Pfadmodul importieren, um die Pfadverbindung const path = forderung zu erleichtern ('Pfad');
Klasse Magenta {
  Konstruktor (Codes) {
    this.codes = codes;
  }
  tokenize () {
    /* Vorheriger Code für Tokenizer*/
  }
  analysieren (Token) {
    /* vorheriger Code der Parse -Methode*/
  }
  laufen() {
    /* Vorheriger Code der Auslaufmethode*/
  }
}

// Lesen Sie die Datei code.m // Einige Textredakteure verwenden \ r \ n als neue Zeile anstelle von \ n, sodass wir \ r löschen
const codes = fs
  .ReadFilesync (Path.Join (__ Dirname, 'Code.m'), 'Utf8')
  .ToString ()
  .Replace (/\ r/g, "");
const magenta = new Magenta (Codes);
Magenta.run ();
Nach dem Login kopieren

Erstellen Sie eine Programmiersprache!

Auf diese Weise haben wir erfolgreich eine Mini -Programmiersprache von Grund auf neu erstellt. Sehen Sie, dass Programmiersprachen so einfach sein können, ein bestimmtes Ding zu vervollständigen. Natürlich ist es unwahrscheinlich, dass Sprachen wie Magenta hier nützlich sein können, um Teil eines beliebten Frameworks zu sein, aber jetzt haben Sie eine Vorstellung davon, was es braucht, um eine Programmiersprache zu erstellen.

Der Himmel ist die Grenze. Wenn Sie tiefer graben möchten, versuchen Sie, dem von mir erstellten Video zu folgen, in dem ein fortgeschritteneres Beispiel vorgestellt wird. In diesem Video zeige ich auch, wie Sie Ihrer Sprache Variablen hinzufügen.

Das obige ist der detaillierte Inhalt vonErstellen wir eine winzige Programmiersprache. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage