ERREUR programmation FLEX\BISON

stof -  
 stof -
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 !!!

2 réponses

  1. flugin Messages postés 207 Statut Membre 15
     
    C'est quoi "bison" ? =s
    0
  2. stof
     
    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