ERREUR programmation FLEX\BISON

Fermé
stof - 26 janv. 2011 à 18:44
 stof - 26 janv. 2011 à 18:58
salut !!
voila je suis en plains dans l'analyse syntaxique avec bison mais la commande
bison -d bis.y me retourne une erreur "line1: unknown character with code 0xff in declaration section"
je ss bloqué !!
a l'aide !!!
A voir également:

2 réponses

flugin Messages postés 153 Date d'inscription mardi 7 avril 2009 Statut Membre Dernière intervention 17 mai 2011 15
26 janv. 2011 à 18:49
C'est quoi "bison" ? =s
0
voila mes fichier .l et .y !!
bison:
%{
#include <stdlib.h>
%}
%start PGME
%token CODE
%token START
%token IDF
%token END
%token INT
%token REAL
%token BOOLEAN
%token CHAR
%token STRING
%token CONST
%token WHILE
%token EXECUTE
%token WHENE
%token DO
%token OTHERWISE
%token AFFECT
%token EGAL
%token DIFF
%token PONITVERGULE
%token VERGULE
%token POINT
%token CONSTE
%token CONSTES
%token CONSTR
%token CONSTRS
%token COMS
%token SOM
%token SOUS
%token MUL
%token DIV


%%
PGME:CODE IDF partie_principal ;
partie_principal:partie_declaration START partie_inst END POINT ;
partie_declaration:type IDF B A;
B:C IDF B|?;
c:VERGULE
type:INT|BOOLEAN|CHAR|STRING|REAL ;
partie_declaration:type IDF A|CONST IDF = constante PONITVERGULE|? ;
constante :CONSTE|CONSTES|CONSTR|CONSTRS ;
partie_inst: IDF AFFECT expression A|WHENE cond EXECUTE inst A|WHENE cond DO parti_inst OTHERWISE partie_inst|? ;
expression :IDF|IDF SOM IDF|IDF SOUS IDF|IDF MUL IDF|IDF DIV IDF ;
A :PONITVERGULE ;
cond:IDF EGAL IDF|IDF DIFF IDF|IDF EGAL contante|IDF DIFF constante ;
inst:partie_inst ;
%%
int main ( int argc, char** argv ) {
yyparse ();
}

flex:
%{
include "bison.tab.h"
%}
lettre [a-zA-Z]
chiffre [0-9]
IDF (({lettre}+)({lettre}*|{chiffre}*|(-?))({lettre}+|{chiffre}+))
constE ({chiffre}+)
constEsignee [\+|\-]{constE}

constR {chiffre}+.?{chiffre}+

constRsignee [\+|\-]{constR}

coms $[.]$

%%
"INT" return (INT);
"REAL" return (REAL)
"BOOLEAN" return (BOOLEAN)
"STRING" return (STRING)
"CHAR" return (CHAR)
";" return(POINTVERGULE);
"," return(VERGULE");
"=" return ("EGAL");
"<>" return ("DIFF");
":=" return(AFFECT);
"." return (POINT);
"CODE" return(CODE);
"START" return(START);
"END" return(END);
"CONST" return (CONST);
"WHILE" return (WHILE);
"EXECUTE" return (EXECUTE);
"WHENE" return (WHENE);
"DO" return (DO);
"OTHERWISE" return (OTHERWISE);
{coms} return (COMS);
"+" return (SOM);
"-" return (SOUS);
"*" return (MUL);
"/" return (DIV);

{lettre} return (IDF) ;

{lettre}- {printf("erreur :un idf ne se termine pas par -");}

{IDF} if (yyleng>20) {printf("erreur:IDF trop long");} else return (IDF) ;

{IDF}- {printf("erreur :un idf ne se termine pas par -");}

{constE} if (yyleng>6) {printf("erreur:constanteE trop long");} else return (CONSTE);

{constEsignee} if (yyleng>6) { printf("erreur:constanteE trop long");} else return (CONSTES);

{constR} if (yyleng>12) {printf("erreur:constanteR trop long");}else return (CONSTR);

{constRsignee} if (yyleng>12) {printf("erreur:constanteE trop long");} else return (CONSTRS);
%%
int
main(void)
{
yylex();
}

svp a l'aide !!
0