Vous connaissez peut-être déjà un ou plusieurs langages de programmation. Mais avez-vous déjà réfléchi à la façon de créer votre propre langage de programmation? Je veux dire:
Un langage de programmation est un ensemble de règles qui convertissent les chaînes en différentes sorties de code machine.
En bref, un langage de programmation n'est qu'un ensemble de règles prédéfinies. Pour le rendre utile, vous avez besoin de quelque chose qui peut comprendre ces règles, telles que les compilateurs , les interprètes , etc. Nous pouvons donc simplement définir certaines règles, puis, pour le faire fonctionner, nous pouvons écrire un programme qui peut comprendre ces règles en utilisant tout langage de programmation existant, qui deviendra notre interprète.
Le compilateur convertit le code en code machine que le processeur peut exécuter (comme un compilateur C).
L'interprète passe par le programme ligne par ligne et exécute chaque commande.
Vous voulez l'essayer? Créons un langage de programmation super simple qui sortit la sortie magenta dans la console. Nous l'appelons Magenta .
Je vais utiliser Node.js, mais vous pouvez apprendre dans n'importe quelle langue et le concept reste le même. Permettez-moi d'abord de créer un fichier index.js et de le configurer.
classe Magenta { constructeur (codes) { this.codes = codes; } courir() { console.log (this.codes); } } // Actuellement, nous stockons le code dans une variable de chaîne appelée `codes` // Plus tard, nous lirons le code à partir du fichier const codes =` imprimer "Hello World" Imprimez "Hello Again" `; const magenta = new magenta (codes); magenta.run ();
Ce que nous faisons ici, c'est déclarer une classe appelée Magenta. Cette classe définit et initialise un objet responsable de l'enregistrement du texte à la console à l'aide de tout texte que nous fournissons via la variable des codes. Et, à l'heure actuelle, nous avons défini la variable des codes directement à l'aide de plusieurs messages "Hello" dans le fichier.
OK, maintenant nous devons créer un soi-disant analyseur lexical.
Ok, parlons d'abord de l'anglais. Veuillez consulter les phrases suivantes:
Êtes-vous ok?
Ici, "Hello" est une salutation ", est" un ton supplémentaire, et "vous" est un pronom personnel. Nous avons un point d'interrogation ("?") À la fin. Nous pouvons diviser n'importe quelle phrase ou phrase en de nombreux composants grammaticaux comme celui-ci. Une autre façon de distinguer ces parties est de les diviser en petites marques. Le programme qui divise le texte en balises est notre analyseur lexical .
Puisque notre langue est très petite, il n'a que deux types de balises, chacune avec une valeur:
Nous pouvons utiliser des expressions régulières pour extraire des balises des chaînes de codes, mais les performances seront très lentes. Une meilleure approche consiste à parcourir chaque caractère de la chaîne de code et à obtenir la balise. Créons donc une méthode de tokenize dans la classe magenta - ce sera notre analyseur lexical.
Code complet
`` 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"
; const Magenta = new Magenta (codes);
### Définir les règles et la syntaxe que nous voulons voir si notre ordre de code correspond à une règle ou une syntaxe. Mais nous devons d'abord définir quelles sont ces règles et syntaxes. Étant donné que notre langue est très petite, elle n'a qu'une simple syntaxe, à savoir le mot-clé d'impression suivi d'une chaîne.
Mot-clé: chaîne d'impression
<code>因此,让我们创建一个解析方法,该方法循环遍历我们的标记,并查看我们是否形成了有效的语法。如果是这样,它将采取必要的措施。 ```javascript class Magenta { constructor(codes) { this.codes = codes; } tokenize() { /* tokenizer 的先前代码*/ } parse(tokens) { const len = tokens.length; let pos = 0; while (pos </code>
Regarder! Nous avons déjà une langue de travail!
OK, mais mettre le code dans une variable de chaîne n'est pas si amusant. Mettons donc notre code magenta dans un fichier appelé code.m. De cette façon, nous pouvons séparer le code magenta de la logique du compilateur. Nous utilisons .m comme extension de fichier pour indiquer que le fichier contient du code dans notre langue.
Livrons le code de ce fichier:
// Importer le module du système de fichiers const fs = require ('fs'); // Importez le module de chemin pour faciliter la connexion PATH PATH = require ('path'); classe Magenta { constructeur (codes) { this.codes = codes; } tokenize () { / * Code précédent pour Tokenizer * / } Parse (jetons) { / * Code précédent de la méthode d'analyse * / } courir() { / * Code précédent de la méthode d'exécution * / } } // Lire le fichier code.m // Certains éditeurs de texte utilisent \ r \ n comme nouvelle ligne au lieu de \ n, nous supprimons donc \ r codes constants = fs .readFilesYC (path.join (__ dirname, 'code.m'), 'utf8') .ToString () .replace (/ \ r / g, ""); const magenta = new magenta (codes); magenta.run ();
De cette façon, nous avons réussi à créer un mini langage de programmation à partir de zéro. Voir, les langages de programmation peuvent être aussi simples que de terminer une chose spécifique. Bien sûr, il est peu probable que des langages comme Magenta ici puissent être utiles pour faire partie d'un cadre populaire, mais maintenant vous avez une idée de ce qu'il faut pour créer un langage de programmation.
Le ciel est la limite. Si vous souhaitez creuser plus profondément, essayez de suivre la vidéo que j'ai faite, qui présente un exemple plus avancé. Dans cette vidéo, je montre également comment ajouter des variables à votre langue.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!