comment commencer à écrire un langage de programmation très simple

Récemment, je cherchais des idées sur ce que je pouvais construire avec C cet été et je suis tombé sur ce post: Un projet intéressant pour apprendre le C?

Implémenter un langage de programmation. Cela ne doit pas être très difficile – j’ai utilisé le langage qui ne doit pas être nommé – mais cela vous obligera à apprendre beaucoup des parties importantes de C. Si vous ne voulez pas écrire de lexer et / ou un parsingur syntaxique vous-même, vous pouvez utiliser lex / flex et le yacc / bison, mais si vous envisagez de le faire, vous voudrez peut-être commencer par un projet un peu plus petit.

J’étais un peu insortinggué par la mise en œuvre d’une réponse en langage de programmation et je me demande comment procéder pour commencer cela? J’ai parcouru tout le livre de K & R et j’ai également effectué certains exercices. J’ai aussi un peu d’expérience en C ++ et en Java si cela compte. Des conseils? Merci!

En savoir plus sur les expressions régulières, les grammaires et un bon générateur d’parsingurs.

Même si vous finissez par implémenter votre propre parsingur, ce sont les concepts fondamentaux de l’implémentation de tout langage de programmation.

Je commencerais par un simple programme de calculasortingce qui peut lire des choses comme:

5 + 10 * 3

et imprimez la réponse. Ensuite, vous pourrez y append des variables, un stream de contrôle et même des fonctions.

Commencez avec un langage très simple (jouet); plus tard, vous pourrez créer une syntaxe plus complexe.

Vous pouvez écrire un interprète pour parsingr les chaînes comme,

 integer x integer y set x, 2 set y, 5 add x, y // x = x + y print x 

et évaluer chaque ligne immédiatement. Si vous stockez les lignes dans un vecteur, il serait facile d’implémenter des boucles avec la commande goto .


Un exemple, Another World (jeu vintage)
Éditeur de script:

texte alternatif

Puis-je simplement dire que j’ai vu beaucoup de gens poser des questions telles que “Comment créer un langage de programmation?” ou “Comment est-il difficile de créer un langage de programmation” et la plupart des réponses indiquent simplement que vous devez passer des années à l’université et lire des livres de 1000 pages. Je suis ici pour dire à tout le monde que vous pouvez poster ces réponses, mais cela ne les aide pas du tout dans leur cheminement pour créer un langage de programmation. J’ai 16 ans et je fais de la programmation depuis presque 2 ans et j’écris des langages de programmation. Ceux qui sont très avancés et orientés object aussi, mais je n’ai lu aucun livre, je n’ai pas fait 8 années d’université. Pour que les gens commencent, voici un langage de programmation simple écrit en C #:

 ssortingng code = "print Hello World"; foreach (ssortingng a in code.Split('\n')) { if (a.StartsWith("print ")) { Console.WriteLine(a.Subssortingng(6)); } } 

quiconque connaît les bases de C # devrait être capable de comprendre cela. Vous ne pouvez pas commencer à créer des langages de programmation sans avoir une expérience en programmation. Assurez-vous d’apprendre un langage de programmation et d’en savoir beaucoup, puis commencez à écrire de simples bouts de code, comme je l’ai posté, et avec l’expérimentation et la pratique, vous allez commencer à écrire des langages de programmation complexes temps 🙂

Eh bien, je pense que quelque chose comme ça est vraiment difficile à faire, mais ce serait aussi un excellent projet animal de compagnie. Vous devriez avoir des notions d’parsingurs syntaxiques, de lexeurs, de contrôle de stream, de paradigmes (impératif, fonctionnel, OO) et de bien d’autres choses.

Beaucoup de gens disent que le livre du dragon est l’un des meilleurs livres pour cela. Peut-être que vous pouvez y jeter un coup d’œil 🙂

Bonne chance!

vous pouvez lire des articles bien écrits de Niklaus Wirth:

  • “Comstackr Construction” (disponible ici ) est une introduction courte et concise à l’art de construire un compilateur.
  • “Algorithmes + Structure de données = Programmes” (malheureusement épuisé), présente un langage plus simple (nommé PL / 0) dans son dernier chapitre.

bien que ces articles soient principalement écrits en Pascal, les concepts exposés se traduisent facilement en C.

J’ai créé un parsingur de langage simple en Java il y a quelque temps. Il évaluait essentiellement les expressions mathématiques, remplaçait les constantes et les variables et fournissait des informations en retour sur les erreurs de syntaxe / type.

Le moyen le plus simple que j’ai trouvé de faire une telle chose était de faire un arbre d’parsing . Cela peut être fait facilement en utilisant deux stacks, une stack d’opérateur et une stack de résultats. Ensuite, vous pouvez simplement l’parsingr de manière récursive à l’aide d’un DFS, peut-être utiliser le modèle de visiteur si vous décidez de le mettre en œuvre dans un langage orienté object.

Il y a beaucoup à dire sur ces choses et si vous le souhaitez, je peux les expliquer plus en profondeur. Je ne l’ai pas fait car je pensais que vous voudriez essayer de mettre en œuvre ce que vous avez mentionné plus haut, mais si vous le faites, prévenez-moi. et nous pouvons parler.

Scheme from Scratch est une belle série de billets de blog sur l’implémentation de Scheme en C. Le code est très lisible et chaque version est basée sur la précédente de manière simple à suivre.

Voici le premier versement: v0.1 – Entiers .

Une autre alternative est de construire un langage sans regarder autre chose. Déterminez ce que vous pouvez faire facilement et partez de là. Par exemple, vous pouvez parsingr des expressions dans une liste de jetons, en les séparant par des espaces, et utiliser la notation avec préfixe (ce qui est assez simple à gérer). Ce genre de chose est très amusant et vous pouvez apprendre beaucoup en expérimentant.

Si vous parlez français, vous pourriez être intéressé par un cours de mes collègues (disponible gratuitement) http://matthieuamiguet.ch/scientifique/enseignement/langages-et-compilateurs bien qu’il utilise Python pour expliquer les concepts de construction et de compilation du langage.

Anglais PDF de PyCon 2010 http://matthieuamiguet.ch/assets/files/scientifique/publis/TeachingComstackrsWithPython_Paper.pdf

Je devrai peut-être lui parler de la traduction de ses informations en anglais 8)

Un ancien tutoriel du compilateur est celui-ci . Bien que ce soit en Pascal, c’est une très bonne source d’informations. Si vous voulez quelque chose de plus récent, vous devriez jeter un coup d’œil à ANTLR .

Pour que les choses restnt simples, je recommande de mettre en œuvre un langage postfixif simple. FORTH ou la partie principale de PostScript serait un excellent choix.

Lisez les messages sur les comp.comstackrs du groupe de discussion usenet, il est accessible via Google Groupes. Il a beaucoup de discussions liées à la construction d’un langage, un compilateur, lex / yacc, les grammaires et autres. Bien sûr, vous devez bien connaître les classiques tels que le livre du dragon, le livre du tigre parmi de nombreux livres sur les compilateurs et les bons livres sur les algorithmes et les structures de données.

Le compilateur original C est donné une nouvelle vie. La majeure partie est en cours de réécriture et sa base de code est suffisamment petite pour être lue et comprise pendant les vacances d’été. Pensez à lire le code avec les documents qui ont été utilisés pour écrire le code de ce compilateur ou de tout compilateur actif, et je suis sûr que vous auriez des idées sur le sharepoint départ, etc.

Laissez quelqu’un d’autre faire le sale boulot pour vous, à savoir le lexer et l’parsingur. Utilisez cup, yacc ou bison pour gérer la syntaxe. Cela vous permettra de vous concentrer sur les décisions les plus importantes en matière de conception linguistique. Il existe même des exemples de définitions d’parsingur pour de nombreuses langues que vous pouvez utiliser comme modèle pour la vôtre.