Ou sont les erreurs de ce code?

jihado86 Messages postés 13 Date d'inscription samedi 25 avril 2009 Statut Membre Dernière intervention 28 mai 2009 - 25 mai 2009 à 12:02
jihado86 Messages postés 13 Date d'inscription samedi 25 avril 2009 Statut Membre Dernière intervention 28 mai 2009 - 28 mai 2009 à 01:07
%{
#include <stdio.h>
typedef char* string ;
#define YYSTYPE string
FILE * entree;
FILE * sortie;
int i=0;
char s[128];
%}
%token '{'
%token '}'
%token '['
%token ']'
%token '('
%token ')'
%token ';'
%token ','
%token ':'
%token '.'
%token '|'
%token '!'
%token '?'
%token '&'
%token '+'
%token '-'
%token '*'
%token '/'
%token '^'
%token '%'
%token '>'
%token '<'
%token 'DIESE'
%token BREAK
%token CASE
%token CONST
%token DOUBLE
%token ELSE
%token FOR
%token IF
%token RETURN
%token STRUCT
%token SWITCH
%token VOID
%token WHILE
%token INTEGER
%token VAR
%token OP
%token PONCT
%token EXPR
%token INCLUDE
%token TYPE
%%
S : IF | '#' | TYPE
'#' INCLUDE '<' EXPR '>'
    {entree = fopen("progc.c", "r+");
    sortie = fopen("graphe.txt", "a");
    fgets(s,128,entree);
    fgets(s,128,entree);
    while (strnicmp (s,"void main()",11))
    {
       fputs(s,sortie);
       fgets(s,128,entree);
        }
    }
IF '(' EXPR ')' EXPR ';'
    {sortie = fopen("graphe.txt", "a");
    fprintf("N%d(IF)\n",i);
    i=i+1;
    fprintf("N%d(%s)N%d\n",i-1,$3,i);
    fprintf("N%d(%s)\n",i,$5);}

IF '(' EXPR ')' '{' '\n' EXPR ';' '\n' ELSE EXPR ';' '\n' '}'
    {sortie = fopen("graphe.txt", "a");
    fprintf("N%d(IF)\n",i);
    i=i+1;
    fprintf("N%d(%s)N%d\n",i-1,$3,i);
    i=i+1;
    fprintf("N%d(NOT %s)N%d\n",i-2,$3,i);
    fprintf("N%d(%s)\n",i-1,$7);
    fprintf("N%d(%s)\n",i,$11);}
TYPE EXPR "(" EXPR ")" "{"
    {entree = fopen("progc.c", "r+");
    sortie = fopen("graphe.txt", "a");
    fgets(s,128,entree);
    while (fgets(s,128,entree))
    {
       fputs(s,sortie);
       fgets(s,128,entree);
        }
    }
%%
extern FILE *yyin;
int main() {
yyin = stdin;
yyparse();
}

5 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
25 mai 2009 à 14:49
Un bonjour/merci aurait été le bienvenue.
Quelle est la question ? Quel est le problème ?
0
jihado86 Messages postés 13 Date d'inscription samedi 25 avril 2009 Statut Membre Dernière intervention 28 mai 2009
25 mai 2009 à 22:06
tu te souviens du code lex?
lorsque j'essaye de construire l'exe avec lex.yy.c et y.tab.c et y.tab.h il y a 52 erreurs
donc peut etre que la faute est dans le yacc
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
25 mai 2009 à 22:11
Remet l'intégralité du fichier lex. Si tu ne mets que la moitié des informations, ça risque d'être compliqué...
0
jihado86 Messages postés 13 Date d'inscription samedi 25 avril 2009 Statut Membre Dernière intervention 28 mai 2009
26 mai 2009 à 16:25
ok
voila le Lex

%{
#include "y.tab.h"
#include <stdio.h>
#include <string.h>
extern YYSTYPE yylval;
FILE * fichier;
%}

chars [A-Za-z]
numbers [0-9]+
var [A-Za-z0-9]+
op [+*/%^&|!=<>-]
ponct [{}();:?.#[]]
expr ({var}|{op}|{ponct})+
type ["int" "char" "float"]

%%
"{"    { yylval=(YYSTYPE); strdup(yytext); return '{'; }
"}"    { yylval=(YYSTYPE); strdup(yytext); return '}'; }
"["    { yylval=(YYSTYPE); strdup(yytext); return '['; }
"]"    { yylval=(YYSTYPE); strdup(yytext); return ']'; }
"("    { yylval=(YYSTYPE); strdup(yytext); return '('; }
")"    { yylval=(YYSTYPE); strdup(yytext); return ')'; }
";"    { yylval=(YYSTYPE); strdup(yytext); return ';'; }
","    { yylval=(YYSTYPE); strdup(yytext); return ','; }
":"    { yylval=(YYSTYPE); strdup(yytext); return ':'; }
"."    { yylval=(YYSTYPE); strdup(yytext); return '.'; }
"|"    { yylval=(YYSTYPE); strdup(yytext); return '|'; }
"!"    { yylval=(YYSTYPE); strdup(yytext); return '!'; }
"?"    { yylval=(YYSTYPE); strdup(yytext); return '?'; }
"&"    { yylval=(YYSTYPE); strdup(yytext); return '&'; }
"+"    { yylval=(YYSTYPE); strdup(yytext); return '+'; }
"-"    { yylval=(YYSTYPE); strdup(yytext); return '-'; }
"*"    { yylval=(YYSTYPE); strdup(yytext); return '*'; }
"/"    { yylval=(YYSTYPE); strdup(yytext); return '/'; }
"^"    { yylval=(YYSTYPE); strdup(yytext); return '^'; }
"%"    { yylval=(YYSTYPE); strdup(yytext); return '%'; }
">"    { yylval=(YYSTYPE); strdup(yytext); return '>'; }
"<"    { yylval=(YYSTYPE); strdup(yytext); return '<'; }
"\#"   { yylval=(YYSTYPE); strdup(yytext); return DIESE; }
"break"   { yylval=(YYSTYPE); strdup(yytext); return BREAK; }
"case"    { yylval=(YYSTYPE); strdup(yytext); return CASE; }
"else"    { yylval=(YYSTYPE); strdup(yytext); return ELSE; }
"for"     { yylval=(YYSTYPE); strdup(yytext); return FOR; }
"if"      { yylval=(YYSTYPE); strdup(yytext); return IF; }
"return"  { yylval=(YYSTYPE); strdup(yytext); return RETURN; }
"switch"  { yylval=(YYSTYPE); strdup(yytext); return SWITCH; }
"void"    { yylval=(YYSTYPE); strdup(yytext); return VOID; }
"while"   { yylval=(YYSTYPE); strdup(yytext); return WHILE; }
"include" { yylval=(YYSTYPE); strdup(yytext); return INCLUDE; }
"NULL"    { yylval=(YYSTYPE); strdup(yytext); return INTEGER; }
[0-9]+    { yylval=(YYSTYPE); strdup(yytext)=yytext; return INTEGER; }
{var}     { yylval=(YYSTYPE); strdup(yytext); return VAR; }
{op}      { yylval=(YYSTYPE); strdup(yytext); return OP; }
{ponct}   { yylval=(YYSTYPE); strdup(yytext); return PONCT; }
{expr}    { yylval=(YYSTYPE); strdup(yytext); return EXPR; }
{type}      { yylval=(YYSTYPE); strdup(yytext); return TYPE; }

%%

int main ()
{
  yylex();
}

et le Yacc

%{
#include <stdio.h>
typedef char* string ;
#define YYSTYPE string
FILE * entree;
FILE * sortie;
int i=0;
char s[128];
%}
%token '{'
%token '}'
%token '['
%token ']'
%token '('
%token ')'
%token ';'
%token ','
%token ':'
%token '.'
%token '|'
%token '!'
%token '?'
%token '&'
%token '+'
%token '-'
%token '*'
%token '/'
%token '^'
%token '%'
%token '>'
%token '<'
%token DIESE
%token BREAK
%token CASE
%token ELSE
%token FOR
%token IF
%token RETURN
%token SWITCH
%token VOID
%token WHILE
%token INTEGER
%token VAR
%token OP
%token PONCT
%token EXPR
%token INCLUDE
%token TYPE
%%
S : IF | DIESE | TYPE
DIESE INCLUDE '<' EXPR '>'
    {entree = fopen("progc.c", "r+");
    sortie = fopen("graphe.txt", "a");
    fgets(s,128,entree);
    fgets(s,128,entree);
    while (strnicmp (s,"void main()",11))
    {
       fputs(s,sortie);
       fgets(s,128,entree);
        }
    }
IF '(' EXPR ')' EXPR ';'
    {sortie = fopen("graphe.txt", "a");
    fprintf("N%d(IF)\n",i);
    i=i+1;
    fprintf("N%d(%s)N%d\n",i-1,$3,i);
    fprintf("N%d(%s)\n",i,$5);}

IF '(' EXPR ')' '{' '\n' EXPR ';' '\n' ELSE EXPR ';' '\n' '}'
    {sortie = fopen("graphe.txt", "a");
    fprintf("N%d(IF)\n",i);
    i=i+1;
    fprintf("N%d(%s)N%d\n",i-1,$3,i);
    i=i+1;
    fprintf("N%d(NOT %s)N%d\n",i-2,$3,i);
    fprintf("N%d(%s)\n",i-1,$7);
    fprintf("N%d(%s)\n",i,$11);}
TYPE EXPR "(" EXPR ")" "{"
    {entree = fopen("progc.c", "r+");
    sortie = fopen("graphe.txt", "a");
    fgets(s,128,entree);
    while (fgets(s,128,entree))
    {
       fputs(s,sortie);
       fgets(s,128,entree);
        }
    }
%%
extern FILE *yyin;
int main() {
yyin = stdin;
yyparse();
}

avec ces deux codes j'ai 42 erreur lors de la creation de l'exe
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jihado86 Messages postés 13 Date d'inscription samedi 25 avril 2009 Statut Membre Dernière intervention 28 mai 2009
28 mai 2009 à 01:07
as-tu une idée?
0
Rejoignez-nous