Erreur de compilation sur un interpreteur de commandes simples.
Bonjour,
J'aimerais realiser un interpreteur a l'aide de flex/bison, qui me permettrait d'appeller les commandes shell correspondantes. Vu qu'un exemple est plus parlant, je mlance :
"ls" dans mon interpreteur de commande, lancerais la commande ls de mon shell, pour m'afficher le resultat dans ma fenetre, facile !
Alors voila ce que j'ai réalisé en me renseignant sur le net. Cependant, j'ai une erreur persisante a la compilation, qui me dit :
Citation:
yaPi.y: Dans la fonction «yyparse» :
yaPi.y:38: erreur: incompatible types in assignment
Voila, ci vous pouviez m'eclaircir... voici mes sources :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| %{
#include "yaPi.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
%}
chiffre [0-9]
entier {chiffre}+
lettre [A-Za-z]
mot {lettre}+
%%
{mot} {
strcpy(yylval.chaine,yytext);
return COMMANDE;
}
{entier} {
yylval.valeur=atoi(yytext);
return NOMBRE;
}
"\n" return FIN; |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| %{
#include "stdio.h"
#include "stdlib.h"
%}
%union{
char chaine[256]; /*On definit deux "champs" possibles dans yylval.*/
int valeur;
}
%token <chaine> COMMANDE
%token <chaine> FIN
%token <valeur> NOMBRE
%type <chaine> ExpressionTexte Ligne
%type <valeur> ExpressionNombre
%start Input
%%
Input:
| Input Ligne
;
ExpressionNombre:
NOMBRE {
$$=$1;
}
;
ExpressionTexte:
COMMANDE {
$$=$1;
}
;
Ligne:
FIN
| ExpressionTexte FIN {
printf("Vous avez tape: %s\n",$1);
system("/bin/$1");
}
| ExpressionNombre FIN {
printf("Vous avez tape: %s\n",$1);
}
;
%%
int yyerror(char* s){
yyparse();
}
int main(void){
yyparse(); /*Appelle de l'analyseur synthaxique.*/
} |