Bonjour, je souhaiterais créer un langage interprété or, je n'ai aucune idée de comment m'y prendre (je précise que j'aimerais le dev sur windows et non sur linux si possible). Pouvez-vous m'aider?
C'est par plaisir, obligation ? Ce langage a-t-il un but précis, genre un langage orienté math ou généraliste ou … ? Pourquoi avoir posté dans un forum C ?
C'est ennuyeux ! Tu devrais quand même avoir une petite idée ? sinon c'est que tu ne sais pas ce qu'est un langage informatique ?
En gros, les instructions de ton langages seront stocké sur disque ou mémoire flash dans ton cas dans un fichier puisque c'est pour windows.
Tu dois donc écrire le code de chaque instruction qui sera exécuté lors de sa lecture. Faire le code de chargement du fichier, puis les appels du code des instructions en fonction des instructions lu dans le fichier chargé par ton interpréteur.
Avec si peu d'info sur ton projet, on ne peut guère t'en dire plus !
Pourquoi plus Windows que Linux? Quel serait l'interface de ce langage avec le système? Et ça dépend de la complexité du langage. Il y a principalement deux phases: + l'analyse syntaxique et sémantique. + l'exécution (...) interprétée.
Le Tout est souvent plus grand que la somme de ses parties.
Je souhaiterais créer un langage ressemblant un peu au js (juste dans la synthaxe). Donc voici un petit exemple de synthaxe:
//Obligatoire pour commencer [
LET number = int(1);
LET helloWorld = string("Hello World");
if (number == 1)
{
console.print(helloWorld);
}
else
{
console.print("Nope");
}
]
Fvirtman a écrit:
Salut,
En effet, programmer un interpréteur n'est pas évident, car il faut pouvoir gérer toutes les boulettes de celui qui écrit.
Il suffit de voir les numéros de warning ou errors a parfois ou chiffres.
Après, si ton langage est très simple, ça peut être intéressant.
As tu par exemple un bout de code de ton langage a nous soumettre ? Avec quelques règles de syntaxe qui vont avec ?
C'est par plaisir, obligation ? Ce langage a-t-il un but précis, genre un langage orienté math ou généraliste ou … ? Pourquoi avoir posté dans un forum C ?
Si je souhaite faire ça c'est bien pour le plaisir de découvrir de nouvelle chose. Mon langage a pour but de pouvoir faire de la gestion de donnée assez facilement (avec plein d'interaction à réaliser avec un fichiers et des données). Ensuite je pense l'orienté "généraliste", et enfin je me suis quand même renseigné avant et j'ai vu que le c était parfait pour créer un langage interprété car c'est un langage de bas niveau. Voilà j’espère avoir été assez claire!
White Crow a écrit:
parce que ça répond à tes attentes ? aux attentes d'éventuels utilisateurs ?
pour apprendre à le faire ?
Ce langage est bien évidemment destiné à moi, je ne compte pas le vendre ou même le distribuer. Je le fais vraiment pour apprendre!
Si je te parle d'arbre ? c'est du chinois ou ça te dit quelque chose ? arbre syntaxique ?
Si te parle de grammaire (au sens de grammaire pour les langages informatiques) ? d'outils comme flex et yacc ?
En gros l'idée c'est de lire un fichier ou l'entrée standard, de la tokeniser, de transformaer à l'aide d'un grammaire ce flux de tokens en plusieurs arbres et d'utiliser cette forêt pour exécuter l'entrée.
Si je te parle d'arbre ? c'est du chinois ou ça te dit quelque chose ? arbre syntaxique ?
Si te parle de grammaire (au sens de grammaire pour les langages informatiques) ? d'outils comme flex et yacc ?
En gros l'idée c'est de lire un fichier ou l'entrée standard, de la tokeniser, de transformaer à l'aide d'un grammaire ce flux de tokens en plusieurs arbres et d'utiliser cette forêt pour exécuter l'entrée.
J'ai déjà entendu parler d'arbre, arbre syntaxique, de grammaire, des deux outils que tu as parlé mais concrètement je sais pas vraiment quoi faire de ces informations.
Je souhaiterais créer un langage ressemblant un peu au js (juste dans la synthaxe). Donc voici un petit exemple de synthaxe:
//Obligatoire pour commencer [
LET number = int(1);
LET helloWorld = string("Hello World");
if (number == 1)
{
console.print(helloWorld);
}
else
{
console.print("Nope");
}
]
Je vois de la gestion d'objet (console.print), de la gestion de variables, de corps {}, des if, des déclarations de variable... C'est pas trivial ton affaire. Je pensais que tu voulais faire un truc comme le LOGO. (langage), mais la c'est pas évident.
A mon avis tu sous estimes la difficulté du truc. Tu peux regarder du coté de flex ou yacc, mais bon.
Et sinon, puisque tu veux créer un truc qui ressemble au javascript, pourquoi ne pas utiliser directement un interpréteur javascript ?
Je vois de la gestion d'objet (console.print), de la gestion de variables, de corps {}, des if, des déclarations de variable... C'est pas trivial ton affaire. Je pensais que tu voulais faire un truc comme le LOGO. (langage), mais la c'est pas évident.
A mon avis tu sous estimes la difficulté du truc. Tu peux regarder du coté de flex ou yacc, mais bon.
Et sinon, puisque tu veux créer un truc qui ressemble au javascript, pourquoi ne pas utiliser directement un interpréteur javascript ?
Enfaite la syntaxe que j'ai écris est mon but à atteindre. Je ne compte pas faire quelque d'aussi dure d'est le début (je ne suis pas fou ;)). Je vais aller checker du coter de yacc et flex mais est-ce qu'ils sont installable sur Windows ??
Fvirtman a écrit:
Et sinon, puisque tu veux créer un truc qui ressemble au javascript, pourquoi ne pas utiliser directement un interpréteur javascript ?
Parce que je ne savais pas que c'était possible :).
Si c'était moi et si c'était pour le fun, voici ce que je ferais :
Quelque chose de simple pour commencer : le programme est composé de lignes, une ligne = une instruction. L'interpréteur va donc lire les lignes une par une.
Chaque ligne commence par un mot-clé suivi de zéro, un ou plusieurs arguments
Ainsi, l'algorithme de l'interpréteur sera simple :
Lire la nouvelle ligne avec 'fscanf' --> dans la variable 'ligne'
Extraire le premier mot
Trouver le numéro du mot-clé dans la table des mots-clés
Si le mot n'est pas un mot-clé, afficher « Syntax Error : » + le mot incorrect
Sinon (le mot-clé existe) :
Switch selon le numéro du mot-clé :
Case (un mot-clé) : appeler la fonction qui traite ce mot-clé
Case (autre mot-clé) : appeler la fonction qui...
et ainsi de suite pour chaque mot-clé
Fin-Sinon
La fonction qui traite un mot-clé fait deux choses :
Relire 'ligne' avec 'sscanf' et le format adéquat pour extraire les arguments
Si 'sscanf' retourne le nombre d'arguments attendu :
Réaliser l'action associée à ce mot-clé
Sinon :
Afficher un message d'erreur
Il restera à inventer une syntaxe simple à base de mots-clés + arguments, une sorte d'assembleur peut-être...
Exemple (pour faire vieillot, je mets tout en majuscules):
REM Calcul de la somme de 1 à 10
LET SOMME 0
LET I 0
LABEL DEBUT
ADD 1 I
ADD I SOMME
ISINFEQ I 10 DEBUT
PRINT SOMME
EXIT
Rien que pour faire ça, il y a du travail, mais je sais que j'en suis capable. Après, il sera toujours temps de complexifier...
(Plutôt qu'un assembleur, ce truc me fait penser aux langages de programmation des calculatrices programmables d'autrefois. Je trouve que c'est un bon objectif pour commencer : ré-écrire un langage de calculatrice. Dans un tel langage, les variables sont prédéfinies, par exemple elles s'appellent A, B, C... Z, et tous les nombres sont des nombres à virgule. Ça simplifie pas mal de chose, je crois, de ne pas s'embêter avec les types.)
- Edité par robun 25 janvier 2021 à 20:50:14
Langage Interprété
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
Le Tout est souvent plus grand que la somme de ses parties.
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html