Sei sulla pagina 1di 3

Scanner (lexer.

l)
%option noyywrap %{ #include "parser.h" #include <iostream> #include <QString> int columna=0; %} letra [a-zA-Z] digito [0-9] cadena [\"][^\"\n]+[\"\n] iden {letra}+ Numero {digito}+ %% "carita" { columna=columna+strlen(yylval.STR); strcpy(yylval.STR, yytext); return Ncarita; } "casita" { columna=columna+strlen(yylval.STR); strcpy(yylval.STR, yytext); return Ncasita; } "ovalo" { columna=columna+strlen(yylval.STR); strcpy(yylval.STR, yytext); return Novalo; } "rectangulo" { columna=columna+strlen(yylval.STR); strcpy(yylval.STR, yytext); return Nrectangulo; } "texto" { columna=columna+strlen(yylval.STR); strcpy(yylval.STR, yytext); return Ntexto; } [(] { columna=columna+strlen(yylval.STR); strcpy(yylval.STR, yytext); return Nparen; } [)] { columna=columna+strlen(yylval.STR); strcpy(yylval.STR, yytext); return Ncparen; } [,] { columna=columna+strlen(yylval.STR); strcpy(yylval.STR, yytext); return Ncoma; } [;] { columna=columna+strlen(yylval.STR); strcpy(yylval.STR, yytext); return Npcoma; } {cadena} { columna=columna+strlen(yylval.STR); strcpy(yylval.STR, yytext); return Ncadena; } {iden} { columna=columna+strlen(yylval.STR); strcpy(yylval.STR, yytext); return Niden; } {Numero} { columna=columna+strlen(yylval.STR); strcpy(yylval.STR, yytext); return Nnum; } [[:blank:]] { /*Se ignoran los espacios en blanco */ } . { std::cout <<yytext<<" Error Lexico "<< std::endl; } %%

Parser (parser.y)
%{ #include "scanner.h" #include "myscene.h" #include <iostream> #include <QString> extern int yylineno; extern int columna; extern char *yytext; int yyerror(const char* mens) { std::cout <<mens<<" "<<yytext<< std::endl; return 0; } Myscene* escena; void setEscena(Myscene* es) { escena=es; } int convertInt(QString val){ bool ok; return val.toInt(&ok, 10); } %} %union{ char STR [256]; } %token<STR> Niden %token<STR> Nnum %token<STR> Ncarita %token<STR> Novalo %token<STR> Nrectangulo %token<STR> Ncasita %token<STR> Nparen %token<STR> Ncparen %token<STR> Ncoma %token<STR> Npcoma %token<STR> Ntexto %token<STR> Ncadena %% S: Lista { std::cout<<"fin"<<std::endl; }; Lista: Lista K | K; K : Ncarita Nparen Nnum Ncoma Nnum Ncparen Npcoma { escena->dib_imagenes("image/carita.png",convertInt($3),convertInt($5)); } |Ncasita Nparen Nnum Ncoma Nnum Ncparen Npcoma { escena->dib_imagenes("image/casita.png",convertInt($3),convertInt($5)); } |Novalo Nparen Nnum Ncoma Nnum Ncparen Npcoma { escena->dib_imagenes("image/ovalo.gif",convertInt($3),convertInt($5)); } |Nrectangulo Nparen Nnum Ncoma Nnum Ncparen Npcoma { escena->dib_imagenes("image/rectangulo.jpg",convertInt($3),convertInt($5)); } |Ntexto Nparen Ncadena Ncparen Npcoma { escena->AgregarTexto(($3)); } |error; %%

Pantallazos

Potrebbero piacerti anche