A voir également:
- Aidez moi à mon projet
- Filigrane projet - Guide
- Film projet x a telecharger gratuitement - Télécharger - Outils professionnels
- Exemple d'un projet déjà monté - Forum Programmation
- Musique projet x - Forum Musique / Radio / Clip
- Gantt projet - Télécharger - Gestion de projets
6 réponses
Bobinours
Messages postés
2898
Date d'inscription
jeudi 26 avril 2001
Statut
Membre
Dernière intervention
21 mars 2013
504
28 oct. 2001 à 04:52
28 oct. 2001 à 04:52
Un compilateur en langage C ?... C'est vague.
Tu veux faire un compilateur pour quel langage ?
-= Bobinours =-
Tu veux faire un compilateur pour quel langage ?
-= Bobinours =-
Un compilateur peut à priori s'écrire dans n'importe quel langage, si celui-ci permet de générer le langage d'assemblage compréhensible par le processeur destiné à l'exécuter. Il était de tradition d'écrire une nouvelle version d'un compilateur dans le langage à compiler, même en Cobol. Rien n'interdit d'écrire en C un compilateur pour un autre langage. Lex et Yacc sont spécialement destinés à l'écriture de compilateur, pour ce qui concerne l'analyse lexicale et syntaxique du langage source.
Les entités lexicales (un entier, un entier signé, une chaîne de caractères, un identificateur, les mots-clés du langage : IF,ELSE,ENDIF,DO,...?) sont décrites dans un fichier sous une forme appropriée, et traitées par Lex qui fournit un jeu de routines en C (yylex.c). De manière similaire, on décrit la syntaxe par blocs (déclarations, instructions, ... ) puis en détail. Par exemple, une instruction d'affectation est composée d'une variable ou une variable indicée, suivie d'un opérateur d'affectation ("=" ou ":="), suivie d'une expression.
Une expression, c'est une constante, ou une variable, ou une fonction, ... suivie d'un opérateur arithmétique, suivi d'une expression (définition récursive) ... suivie d'un ";"
Les règles syntaxiques, incluant les productions (instructions en C définissant ce qu'on fait quand la règle est vérifiée ?) et le résultat de Lex, sont analysées par Yacc qui produit une routine en C (l'analyseur syntaxique à base d'automate à états finis) et même un peu plus. Quand une anomalie est détectée, on doit s'interroger si on continue (fonctionnement en mode dégradé, en général on cherche à appliquer une nouvelle règle) ou si l'on s'arrête.
On doit ensuite effectuer des contrôles de sémantique (est-ce que la variable a été déclarée, de quel type ? peut-on affecter une chaîne à un entier, et si oui, au prix de quel type de conversion ? régler le problème de priorité des opérateurs arithmétiques ou logiques, ...). Cette phase est effectuée le plus souvent en plusieurs passes (typage, rangement, ...).
Enfin, on génére le code d'assemblage, ce qui veut aussi dire qu'il faut prévoir l'assembleur, c'est-à-dire l'écrire entièrement ou partiellement . Mais ceci est une autre histoire, qui ne s'écrit pas en deux jours !!!
Les entités lexicales (un entier, un entier signé, une chaîne de caractères, un identificateur, les mots-clés du langage : IF,ELSE,ENDIF,DO,...?) sont décrites dans un fichier sous une forme appropriée, et traitées par Lex qui fournit un jeu de routines en C (yylex.c). De manière similaire, on décrit la syntaxe par blocs (déclarations, instructions, ... ) puis en détail. Par exemple, une instruction d'affectation est composée d'une variable ou une variable indicée, suivie d'un opérateur d'affectation ("=" ou ":="), suivie d'une expression.
Une expression, c'est une constante, ou une variable, ou une fonction, ... suivie d'un opérateur arithmétique, suivi d'une expression (définition récursive) ... suivie d'un ";"
Les règles syntaxiques, incluant les productions (instructions en C définissant ce qu'on fait quand la règle est vérifiée ?) et le résultat de Lex, sont analysées par Yacc qui produit une routine en C (l'analyseur syntaxique à base d'automate à états finis) et même un peu plus. Quand une anomalie est détectée, on doit s'interroger si on continue (fonctionnement en mode dégradé, en général on cherche à appliquer une nouvelle règle) ou si l'on s'arrête.
On doit ensuite effectuer des contrôles de sémantique (est-ce que la variable a été déclarée, de quel type ? peut-on affecter une chaîne à un entier, et si oui, au prix de quel type de conversion ? régler le problème de priorité des opérateurs arithmétiques ou logiques, ...). Cette phase est effectuée le plus souvent en plusieurs passes (typage, rangement, ...).
Enfin, on génére le code d'assemblage, ce qui veut aussi dire qu'il faut prévoir l'assembleur, c'est-à-dire l'écrire entièrement ou partiellement . Mais ceci est une autre histoire, qui ne s'écrit pas en deux jours !!!
sebsauvage
Messages postés
32893
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 659
30 oct. 2001 à 14:31
30 oct. 2001 à 14:31
Et j'ajouterais que les 2 outils classiques de création de compilateurs sont Lexx et Yacc (gratuits).
C'est la base de nombreux compilateurs.
Ils permettent de créer son propre language en définissant la syntaxe et le lexique.
C'est la base de nombreux compilateurs.
Ils permettent de créer son propre language en définissant la syntaxe et le lexique.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
Vous pouvez toujous realiser un compilateur avec C en utilisant les outils Lex, bison et Yacc de GNU,...
Vous pouvez toujous realiser un compilateur avec C en utilisant les outils Lex, bison et Yacc de GNU,...
28 oct. 2001 à 18:55
un compilateur qui detecte les erreurs de syntaxes et logiques dans un programme écris en algorythme et je doit réaliser ce compilateur en langage C.
ET merci...