web-dev-qa-db-fra.com

Comment faire votre propre langue de programmation?

Dupliquer possible:
[.____] apprendre à écrire un compilateur

J'ai regardé autour de moi en essayant d'en savoir plus sur le développement de langues de programmation, mais je n'ai pas pu trouver beaucoup de choses en ligne. J'ai trouvé des vidéos de tutoriels, mais pas beaucoup pour des guides de texte, des FAQ, des conseils, etc. Je suis vraiment curieux de construire mon propre langage de programmation. Cela m'amène à SO pour demander:

Comment pouvez-vous faire votre propre langue de programmation?

Je voudrais construire une langue très fondamentale. Je ne prévois pas d'avoir une très bonne langue, je ne pense pas non plus que cela sera utilisé par quelqu'un. Je veux simplement faire de ma propre langue pour en savoir plus sur les systèmes d'exploitation, la programmation et de devenir mieux à tout.

Où commence-t-on? Construire la syntaxe? Construire un compilateur? Quelles compétences sont nécessaires? Beaucoup d'assemblée et de compréhension du système d'exploitation? Quelles langues sont la plupart des compilateurs et des langues intégrées? Je suppose que c.

33
user427390

Je dirais que avant de commencer, vous voudrez peut-être jeter un coup d'œil au - Dragon Book et/ou Pragmatics de langage de programmation . Cela vous montez dans la théorie des langages de programmation. Les livres couvrent la compilation et l'interprétation et vous permettront de construire tous les outils nécessaires pour créer un langage de programmation de base.

Je ne sais pas combien de langage de montage vous connaissez, mais à moins que vous ne soyez plutôt à l'aise avec certains dialectes de la programmation linguistique de montage, je vous conseillerais de tenter d'écrire un compilateur qui compile le code de montage, car il est un peu mal un défi. Vous avez mentionné plus tôt que vous êtes familiers WTIH C et C++, vous pouvez peut-être écrire un compilateur qui compilait jusqu'à C ou C++, puis utilisez GCC/G ++ ou tout autre compilateur C/C++ pour convertir le code à une exécutable native. C'est ce que le langage de programmation vala (il convertit Vala Syntaxe sur C code qui utilise la bibliothèque GOBJECT).

Quant à ce que vous pouvez utiliser pour écrire le compilateur, vous avez beaucoup d'options. Vous pouvez l'écrire à la main en C ou C++, ou afin de simplifier le développement, vous pouvez utiliser une langue de niveau supérieur afin de pouvoir vous concentrer sur l'écriture du compilateur plus que les attributions de mémoire et de telles personnes nécessaires pour travailler avec des chaînes. en C.

Vous pouvez simplement générer les grammaires et avoir flex et Bison Générer l'analyseur d'analyseur et de lexical. Ceci est vraiment utile car cela vous permet de faire du développement itératif pour travailler rapidement sur l'obtention d'un compilateur de travail.

Une autre option que vous avez est d'utiliser ANTLR Pour générer votre analyseur, l'avantage est que vous obtenez de nombreuses langues cibles que AntLR peut compiler. Je n'ai jamais utilisé cela mais j'en ai beaucoup entendu parler.

En outre, si vous souhaitez une meilleure mise à la terre sur les modèles qui sont utilisés si souvent dans la programmation du compilateur de langage/de la construction de scanner/analgésique, vous devez obtenir un livre sur les modèles de calcul. Je recommanderais Introduction à la théorie du calcul .

Vous semblez également montrer un intérêt à la compréhension des systèmes d'exploitation. Cela, je dirais que c'est quelque chose qui est distinct de la conception linguistique de programmation et devrait être poursuivi séparément. Le livre principes de systèmes d'exploitation modernes est un très bon point de départ pour apprendre à ce sujet. Vous pouvez commencer avec de petits projets tels que la création d'une coquille ou écrire un programme émulé la commande LS, puis passer à des choses de niveau plus bas, en fonction de la manière dont vous êtes avec les appels système dans C.

J'espère que cela vous aide.

EDIT: J'ai beaucoup appris depuis que j'écris cette réponse. Je prenais le Cours en ligne sur les langages de programmation Cette université Brown offrait quand j'ai vu cette réponse en vedette là-bas. Le professeur souligne très à juste titre que cette réponse parle beaucoup sur les analyseurs, mais il est léger sur tout le reste. Je suggérerais vraiment de traverser les vidéos et des exercices du cours si vous souhaitez avoir une meilleure idée de la création d'une langue de programmation.

31
Varun Madiath

Cela dépend entièrement de ce que votre langage de programmation va être comme.

  • Voulez-vous vraiment que cela soit compilé? Il existe également des langues interprétées ... ou vous pouvez mettre en œuvre la compilation à l'heure d'exécution

  • Que voulez-vous que la plate-forme cible soit? Quelques options:

    • Code natif (quelles architectures et systèmes d'exploitation?)
    • Jvm
    • Normal .net
    • .NET en utilisant la langue dynamique d'exécution (comme ironRuby/IronPython)
    • perroquet

Personnellement, je voudrais fortement envisagez de cibler le JVM ou .NET, juste parce que vous obtenez beaucoup de "sécurité" gratuitement, ainsi qu'un énorme ensemble des bibliothèques que votre langue peut utiliser. (Évidemment avec du code natif, il y a aussi beaucoup de bibliothèques, mais je soupçonne que l'interopérabilité entre eux peut être plus complète.)

Je ne vois aucune raison pour laquelle vous en particulier Vous souhaitez écrire un compilateur (ou une autre partie du système) en C, surtout si cela n'est à des fins éducatives que (Donc, vous n'avez pas besoin d'un compilateur de 100 millions de lignes-un second). Dans quelle langue êtes-vous personnellement le plus productif?

6
Jon Skeet

Jetez un coup d'œil à ANTLR . C'est un compilateur de compilateur génial que vous utilisez pour créer un analyseur pour une langue.

Construire une langue consiste essentiellement à définir une grammaire et à ajouter des règles de production à cette grammaire. Faire cela à la main n'est pas trivial, mais un bon compilateur-compilateur vous aidera beaucoup.

Vous voudrez peut-être aussi consulter le classique "Dragon Book" (un livre sur les compilateurs qui comporte un chevalier qui tue un dragon sur la page d'accueil). (Recherche le sur Google).

Les langues spécifiques du domaine de la construction sont une compétence utile à maîtriser. Les langues spécifiques du domaine ne sont généralement pas une langue de programmation complets, mais généralement des règles commerciales formulées dans une langue fabriquée sur mesure sur mesure pour le projet. Regardez ce sujet aussi.

5
Holstebroe

Il existe différents tutoriels en ligne tels que Ecrivez-vous un schéma dans 48 heures .

Un endroit pour démarrer ce que ce soit 'pourrait être avec un "langage spécifique de domaine intégré" ( [~ # ~] EDSL [~ # ~ ~] ). Il s'agit d'une langue qui fonctionne réellement dans l'environnement d'un autre, mais vous avez créé des mots-clés, des opérateurs, etc. particulièrement adaptés au sujet (domaine) que vous souhaitez travailler.

3
Gaius