Mille merci, puisque vous lisez ces lignes c'est que vous êtes intérésser à mon soit disant IDEE.
Bon, je cherche des cours et des explications pour créer un nouveau language de programmation, je crois que j'ai tous dit, et merci encore.
Mille merci, puisque vous lisez ces lignes c'est que vous êtes intérésser à mon soit disant IDEE.
Bon, je cherche des cours et des explications pour créer un nouveau language de programmation, je crois que j'ai tous dit, et merci encore.
Ca risque de ne pas être une chose très aisée mais si tu y tiens... Il te faut des outils donc voici quelques liens:
http://dinosaur.compilertools.net/
http://ds9a.nl/lex-yacc/#download
http://www.linux-france.org/article/devl/lexyacc/
Puis je pense que tu peux voir pour le sujet de la Théorie des langages mais c'est un assez gros sujet qui est découpé en plusieurs modules donc tu as de la lecture devant toi.
Pour finir tu vas avoir une très très grosse partie sur la conception même du langage que tu veux créer et donc définir la syntaxe, les règles de syntaxe et de sémantiques, etc... Suivant la compléxité que tu recherche et les fonctionnalités, ca peut s'avérer être un projet de plusieurs années
Bon courage
Alors, tu souhaites créer un langage de programmation, c'est quelque chose de réellement difficile. Ca dépend à quel point du souhaite le créer.
Tu as déjà une grosse étape qui va consister à Compiler ton langage source vers un langage cible de plus bas niveau. Il faut définir le langage cible pour essayer de voir à quel point cela sera difficile (par exemple en C, en C++, ou en assembleur).
Dans la phase de compilation, il y a plusieurs étapes : analyseur lexical (implémentable par un automate normal), analyseur syntaxique (implémentable par un automate à pile). Pour réaliser ceux-ci, tu peux utiliser des bibliothèques tout fait (disponible en C, java ou encore camL) tel que lex et yacc. Je viens de parler d'analyse syntaxique, cela requiert de déterminer la grammaire de ton langage (ce qui implique de connaître la théorie des langages également)
Connaissance requise : Automate, automate à pile, théorie des langages (grammaires), techniques d'analyse syntaxique et lexical
Ensuite vient la partie d'analyse sémantique, il n'y a, à ma connaissance, aucune bibliothèque permettant d'automatiser cela (il faut connaître certaines notions supplémentaires, tel que : table des chaines (implémentable par une table de hachage), table des symboles).
Il faut donc connaître les notions de : analyse sémantique, table des symboles
Ensuite, ça dépend un peu du langage cible. Tu peux par exemple convertir ton code en C.
Parfois, on le convertit en code 3 adresses (dans ce cas, il y a des phases d'optimisation complexes). Puis en code assembleur (il y a encore des phases d'optimisation poussées et complexes).
Si ton langage de départ est un langage de type fonctionnel ou logique, c'est encore plus compliqué. Il y a énormement de techniques pour rendre ce type de langage en langage impératif (d'autres sauront mieux te préciser ce point).
Il y a des cours sur la théorie de la compilation en ligne (dans théorie des langages) :
http://general.developpez.com/cours/
Suivi les termes que j'ai mis en gras, tu verras le boulot que tu as à faire pour réaliser ce que tu souhaites. Et même en sachant ceci, ce n'est pas dit que ton langage soit bien (c'est à dire, performant, portable, disposant d'une bibliothèque standard assez complète, et même innovante). Mais ça fait un très bon exercice, même si c'est pas complet et pas innovant
De maniere interessante, les reponses deja donnees donnent des pistes principalement pour la realisation d'une implementation. La premiere etape (a laquelle Frank fait allusion), c'est de definir ton langage. Et pour etre capable de faire ca, il faut bien connaitre les langages semblables a celui que tu desires -- et etre capable d'articuler ce qui ne te convient pas chez eux -- et les theories qu'il y a derriere. Deux bouquins relativement abordables:
- Concepts, Techniques, and Models of Computer Programming de Van Roi et Haridi pour la partie semantique
- Types and Programming Languages de Pierce pour le systeme de type.
Le sujet revient periodiquement sur Lambda the Ultimate, tu peux chercher dans leurs archives.
Je me permet également de donner un chtit conseil, même si je n'y connais rien dans le domaine. Avant de créer un langage de programmation, comme l'a dit Jean-Marc, il faut que fasses un cahier des charges très précis, et que tu te demandes ce que ton langage pourra faire de "plus" que les autres. Par de plus, je n'entend pas forcément inventer un nouveau concept, mais faciliter ce que certains langages ne permettent que difficillement.
Donc attarde toi sur le cahier des charges et sur la "conception" de ton langage avant de te lancer dans le code. Pendant ce temps, tu pourras étudier (si tu ne connais pas déjà le sujet bien entendu) tous les domaines qu'à cité millie.
Non, tu n'as pas tout dit : quelle est la finalité ? Est-ce un projet personnel juste destiné à te faire plaisir, un projet didactique, ou avec une visée plus amibitieuse, est-il destiné à une plateforme microprocesseur ou microcontrôleur, doit-il répondre à des contraintes particulières ?Envoyé par @v@lon
Non pas que la réponse à toutes ces questions va changer grand chose au fait que tu devras assimiler toutes les connaissances citées par millie, mais au moins cela permettra d'évaluer tes chances de réussite selon ton niveau de départ.
ce serait cocasse si le langage que veut créer @v@lon existait déja
quels sont les langages qu'il connait ?
en quoi ces langages sont insatisfaisants ?
Une seule question : pourquoi inventer un langage de plus ?
En répondant à cette question, tu répondras à toutes les autres.
Faudrait déjà qu'il réponde
Personnellement, je trouve que c'est un excellent exercice de faire cela. Ca permet vraiment d'élargir ses connaissances dans le domaine de la Compilation.Envoyé par Patriarch24
Absolument d'accord. Mais pourquoi ne pas commencer par étudier des langages déjà créés dans ce cas ?Personnellement, je trouve que c'est un excellent exercice de faire cela. Ca permet vraiment d'élargir ses connaissances dans le domaine de la Compilation.
Enfin bref, @v@lon ne répondant pas, on n'en saura pas plus pour l'instant
La réponse peut vraiment varié d'une personne à l'autre mais en général le but du jeu c'est de savoir "comment ça marche". C'est de ce genre de petites choses que sont parties des petits langages (aux grandes possibilités) comme Io. La simple volonté d'apprendre le BNF, de définir une grammaire après s'être décidé pour un (ou plusieurs!) paradigmes. Et enfin la phase d'implémentation.Envoyé par Patriarch24
Je t'assure que la première fois que tu le fais, même qud ce n'est qu'un tout petit langage avec 5 mots clés mais que "ça marche" t'es vraiment content
Un livre vraiment sympathique et pe plus accessible que celui de Van Roy au début c'est la réédition du LISP de Queinnec chez Paracamplus
messieurs dames, permetez moi de vous dire que çe n'est pas simple pour moi, de me connecter sur internet au quotidien puisque je suis un officier élève au sein de l'academie royale militaire marocaine.
En mettant cette question sur le forum de ce site, je m'attender à une douzaine de fichiers PDF, quelque sites web au des livre de 400 pages. Mais je vois que je vais aussi faire de l'economie.
pour Franck.H ==> je vous remercie infiniment pour ces sites, mais je ne suis pas aussi bon en anglais (3eme année).
Pour Millie ==> aucun reproche, c'est excellant.
Pour Jean-Marc.Bourguet ==> un syntaxe fraçais, ou même arabe.
Pour Woufeil ==> Je crois que c'est déjà fait, merci beaucoup.
Pour GrandFather ==> C'est un projet entre élèves de l'academie militaire, une sorte de façon de dire à nos superieurs que nous ne sommes des simples soldats, sur tout que je suis en section electronique informatique, et je vais me spécialisé sur ce dernier, je veux que mon language soit sur une plateform microprocesseur, portable, simple à aprendre, extensible, et sur tout libre.
Pour HRS ==> je metrise le VB 6.0 VB.NET, C/C++, un peut de Java et Python, pour VB6/.NET, pour Windows seulement, pour C/C++/Java il te faut une étérnité pour les apprendre, pour python pas assé de documentation sur le language.
Pour Patriarch24 ==> Pourquoi il y'a plusieurs marques de voitures? et pour les languages déjà créer, c'est pas mon truc de recopier.
Pour Gnux ==> C'est pour celà qu'on fait encore des bébés.
Bref merci à vous tous, je suis toujours en attente de vos reponces, et je vous promet d'être plus souvent sur le forum.
.:Les forum sont faites pour developpez les idées pas pour les détruire:. proverbe créer par mon frère
moi aussi je voudrais créer un langage de programmation pour internet , et un langage SGBD mais il n'y a pas vraiment de réponse ici pourrais-je en avoir une ?
lol ce n'est pas ce qu'l voulait dire...
En informatique "syntaxe" signifie l'ordre des "mots", des "phrases", des instructions en général...
Par exemple, dans un langage procédural classique (style C, Fortran, ...), tu auras :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Affiche_Objet ( CetObjet ) ... ... A = B
Déjà, en Pascal, le signe "=" devient ":=" ..
Et donc la ligne :
se transforme en
Code : Sélectionner tout - Visualiser dans une fenêtre à part A = B
Code : Sélectionner tout - Visualiser dans une fenêtre à part A := B
Maintenant, dans un langage objet, la "fonction" indiquée ci-dessus deviendra :
Et figurera autant de fois qu'il y a de classes d'objets..
Code : Sélectionner tout - Visualiser dans une fenêtre à part CetObjet.Affiche()
De la même manière, dans la plupart des langages de haut niveau, les tests sont effectés suivant une écriture correspondant à :
Le signe "=" pouvant être ":=", "==", ".EQ.", .....
Code : Sélectionner tout - Visualiser dans une fenêtre à part if ( toto = 1 )
Mais par exemple dans un système de script shell comme ksh ou bash, ce sera plutôt :
Code : Sélectionner tout - Visualiser dans une fenêtre à part if [ 'toto' = 1 ]
La syntaxe informatique consiste donc en la définition des signes ("=", "if", "["...),, la définition des instructions ("read", "open", "if"...), la définition de la construction des "phrases" lconsistuées avec ces instructions ("if ( a = b)", "open ( "fichier", "r")" ...), la définition des "latitudes" possibles pour écrire ces phrases (souplesse ou non d'écriture (changement de l'ordre des paramètres), concaténation de plusieurs instructions en une, possibilité de couper l'instruction sur plusieurs lignes, ....). Puis il faut la définition des constantes, du formattage des chiffres, des formats de sortie (impression à l'écran, écriture dans un fichier, lecture d'un fichier..).
ça c'est uniquement la base de départ....
Une fois ceci constitué, cela te permettra d'établir un "compilateur", qui passera au travers du "programme" (fichier texte) établi avec ce langage, et pourra en vérifier la syntaxe, et qui là pourra tenter de le formatter en interne pour finalement l'écrire en langage machine...
Bref, la "syntaxe" informatique est déterminante et imposante à construire, que tu la fasses à partir du français, de l'anglais, ou de l'arabe, elle en est relativement indépendante...
Elle définit ce que ton LANGAGE à toi fait et peut faire... (pas la LANGUE utilisée)
PS : je viens juste de me rendre compte que le posteur précédent a déterré cette discussion... Bravo !!!! 3 ans d'enterrement .. Beau déterrage !!
Pourquoi veux tu créer un langage de programmation ? Qu'est ce qui ne te va pas dans l'offre existante ? Quelle est d'ailleurs ton niveau de connaissance de l'offre existante ? Quels sont les langages que tu as pratiqué ? A quel point as-tu cherché une solution existante à tes problèmes ?
Une fois que tu auras exprimé ce qui ne te plait pas dans ce qu'il y a actuellement, qu'est ce que tu proposes pour l'améliorer ? Quelles sont tes idées d'innovations ? Quels sont exactement les buts de ton "nouveau langage" ? Les domaines précis d'application ?
Quel genre de langage veux tu ? Typage statique, dynamique ? Si typage statique, types riches ou pauvre (tu comptes de limiter à string, int, bool, ou tu veux mettre des types abstraits, existentiels, fantômes, GADT, tu veux typer le html produit, les requêtes, etc.) ? Si typage dynamique, quel niveau de sureté à l'exécution ? A la php qui tente de faire "marcher" n'importe quel code ? Ou plus proche de langage plus récent qui ne vont pas convertir une chaine de caractère en entier juste "au cas où c'est ce que le programmeur voulait" ?
Quel genre de modèle ? Modèle object, impératif, fonctionnel, logique, autre ?
Il faut bien se rendre compte qu'on ne "crée" pas un langage à la C comme un langage à la List, comme un langage à la python ou comme un langage à la haskell. Et surtout, qu'il ne sert à rien de créer un langage si tu n'as pas une *très bonne* connaissance de l'existant, sinon tu as toutes les chances de simplement reproduire les mêmes erreurs, en sans doute bien pire !
Mais quand tu auras répondu précisément à ces questions, on se fera un plaisir de te guider dans ta quête
Créer un nouveau langage de programmation (si on veut le faire sérieusement) est une tâche très ardue qui nécessitera énormément de temps et beaucoup de persévérance.
Je me suis moi-même lancé dans cette aventure en 2006 en créant un langage de scripts destiné à être intégré dans un logiciel de gestion commerciale. Ce langage, fortement inspiré de Lisp et de Scheme, a été intégré au logiciel (la version de cette époque là) en 2008. Il a donc fallu 2 ans pour que celui-ci puisse être utilisé en situation réelle. Attention, jusque là, ce n'était que de l'automation (les scripts sont des macros qui permettent de configurer et de réaliser certaines tâches relativement simples). Il s'agissait d'un projet propriétaire, comme d'ailleurs le logiciel de gestion commerciale auquel il était intégré.
En 2009, j'ai décidé de créer une nouvelle branche de développement basée sur ce langage (dont je suis l'auteur) et de le rebaptiser "Abstrasy". Il s'agit à présent d'un projet open-source sous licence EUPL (licence publique de l'union européenne).
Les objectifs aussi ont évolués. Outres les aspects théoriques et pédagogiques liés inévitablement à ce genre de projet, il s'agit de développer et d'étoffer le langage de manière à le rendre autonome, extensible, bref le plus complet possible.
Un travail énorme a déjà été réalisé. Si on considère que le projet est démarré depuis la première version propriétaire, j'y travaille depuis juin 2006. Je continue toujours, et ce qui reste à faire est colossal.
Si vous souhaitez créer un nouveau langage de programmation, dites vous que c'est un travail énorme. Mais d'un autre coté, on y gagne énormément en connaissances et en expériences (on est obligé de s'élargir, de bien comprendre et d'intégrer les différentes théories et modèles). Vous en aurez aussi pour des années avant d'obtenir un résultat, disons "présentable"...
A présent, si vous souhaitez participer au développement d'un nouveau langage de programmation, là, c'est différent. Vous pourrez peut-être vous rendre utile en devenant contributeur. C'est déjà pas mal du tout et surtout, plus facilement accessible. Vous n'aurez peut-être pas tout créé, mais vous aurez participé.
Bien entendu, pour cela, vous devrez vous familiariser avec ce langage. Peut-être sans disposer de toute la documentation, parce que celle-ci est toujours en cours de rédaction (généralement des documentations très volumineuses). C'est très instructif et vous ne manquerez pas d'y gagner en expériences et serez "forcé" de vous élargir en sortant des sentiers battus (C, Java, C#, etc...) en appréhendant des modèles moins connus mais très puissants.
Pour vous faire une idée, pourquoi ne pas aller sur http://www.abstrasy.net. Il s'agit du site officiel du langage que je développe. Découvrez-le et si vous le souhaitez, vous pourrez peut-être vous proposer pour devenir contributeur. C'est un projet open-source (un interpréteur, langage multi-paradigmes, plus de détails sur le site).
Perso, moi aussi j'aimerai créer un langage de programmation.
J'aimerai que ce langage soit développé en vb.net.
Ce langage sera pour créer des applications consoles, et graphiques ainsi que des dll.
Bref ce langage devra t'être riche en mots-clés et etc.
J'attends une réponse avec impatience.
Ce qu'il faut surtout prévoir, ce n'est pas seulement le langage lui-même, mais aussi la première implémentation que tu comptes lui donner:
- Interpréteur (peut être développé dans n'importe quel langage, ne nécessite pas de compilateur externe pour fonctionner).
- Compilateur vers un langage de plus bas niveau (aussi appelé transcompilateur, ou transpiler en Anglais): Convertit le langage de base en C, assembleur, etc., puis appelle un compilo existant pour en faire un exécutable: Nécessite que le compilo existant soit installé.
- Compilateur complet vers un exécutable: Nécessite une connaissance étendue de l'architecture cible (jusqu'aux codes binaires que le processeur exécute, plus le format d'exécutable utilisé par l'OS cible).
Selon les cas, la plupart des gens choisissent soit l'option 1, soit l'option 2 par-dessus gcc ou LLVM.
L'implémentation prévue peut avoir une influence sur le langage lui-même et ses capacités: Les langages interprétés sont bien plus appropriés (implémentation beaucoup plus facile, etc.) pour des choses comme le typage dynamique, etc.
Pour en revenir à ta question, qu'est'ce qui est "développé en vb.net"? 1, 2 ou 3?
Ce qui sera codé en vb.net ça sera un compilateur vers un langage C (bas niveau). Mais j'ai quelques questions à propos de l'interpréteur :
- L'interpréteur fonctionne t-il plus ou moins comme Java c'est à dire avec son propre format de fichier (ex : .jar) ?
- Si l'interpréteur fonctionne sans compilateur externe, le fonctionnement d'un interpréteur est-il comme le BATCH qui n'a pas besoin de compilateur pour fonctionner ?
Si je comprends bien, cmd fonctionne comme un interpréteur c'est à dire qu'il exécute des fichiers de code sans compilation. Mais est-il possible de faire la même
chose mais pour des applications graphiques ?
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager