Está en la página 1de 9

Ejemplo 1

%{
#define pId 1
#define pCte 2
#define pSum 3
#define pMul 4
#define pAbr 5
#define pCer 6
#define Error 999
%}
%%
[a-z]+
{ return
[0-9]+
{ return
"+"
{ return
"*"
{ return
"("
{ return
")"
{ return
[\ \t\n]
{ ;
.
{ return

pId;
pCte;
pSum;
pMul;
pAbr;
pCer;

}
}
}
}
}
}
}
Error; }

%token pId 1
%token pCte 2
%token pSum 3
%token pMul 4
%token pAbr 5
%token pCer 6
%start Expresion
%%
Expresion : Termino RestoExpr ;
RestoExpr : pSum Termino RestoExpr ;
| ;
Termino : Factor RestoTerm ;
RestoTerm : pMul Factor RestoTerm ;
| ;
Factor : pId ;
| pCte ;
| pAbr Expresion pCer ;
%%
main () {
yyparse ();
}

Ejemplo 2

%{
int nPal = 0, nNum = 0;
%}
letra
cifra

[a-z]
[0-9]

%%
{letra}+
{cifra}+
\n
.

{
{
{
{

++nPal; }
++nNum; }
; }
; }

%%
main () {
yylex ();
printf ("Palabras: %d\n", nPal);
printf ("Numeros : %d\n", nNum);
}

Ejemplo 3

%{
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define

prEnteros 1
prCaracteres 2
prTabla 3
prDe 4
pId 5
pNum 6
pPuntero 7
pAbrir 8
pCerrar 9
pSeparador 10
Error 999

%}
letra
digito

[a-zA-Z]
[0-9]

%%
ENTEROS
CARACTERES
TABLA
DE

{
{
{
{

return
return
return
return

prEnteros; }
prCaracteres; }
prTabla; }
prDe; }

{letra}({letra}|{digito})*
{digito}+
"^"
"["
]
".."

{
{
{
{

return
return
return
return

[\ \t\n]
.

%token
%token
%token
%token
%token
%token
%token
%token
%token
%token

%%

pPuntero; }
pAbrir; }
pCerrar; }
pSeparador; }

{ ; }
{ return Error; }

prEnteros 1
prCaracteres 2
prTabla 3
prDe 4
pId 5
pNum 6
pPuntero 7
pAbrir 8
pCerrar 9
pSeparador 10

%start Tipo

{ return pId; }
{ return pNum; }

Tipo : TipoSimple ;
| pPuntero pId ;
| prTabla pAbrir TipoSimple pCerrar prDe Tipo ;
TipoSimple : prEnteros ;
| prCaracteres ;
| pNum pSeparador pNum ;
%%
main () {
if ( yyparse () == 0 )
printf ("No se ha encontrado error alguno\n");
}

Ejemplo 4

%{
#include "y.tab.h"
%}
Letra [a-zA-Z]
Digito [0-9]
Exp
[eE][-+]?{Digito}+
%%
AND
NOT
OR
DIV
MOD

{
{
{
{
{

return
return
return
return
return

prAnd;
prNot;
prOr;
prDiv;
prMod;

}
}
}
}
}

{Letra}({Letra}|{Digito})*
{Digito}+
{Digito}+"."{Digito}+
{Digito}+("."{Digito}+)?{Exp}
"<"=
>=
"<">
:=
[\ \t\n]+
.

{
{
{
{
{
{

return
return
return
return
; }
return

prAnd
prOr
prNot
prDiv
prMod
pId
pCteEnt
pCteDec
pCteExp
pMei
pMai
pDis
pAsig

%start Asignacion
%%

return
return
return
return

pMei; }
pMai; }
pDis; }
pAsig; }
yytext [0]; }

%{
extern yytext [], yylineno;
%}
%token
%token
%token
%token
%token
%token
%token
%token
%token
%token
%token
%token
%token

{
{
{
{

pId; }
pCteEnt; }
pCteDec; }
pCteExp; }

Asignacion : pId pAsig Expresion ';' ;


Expresion : ExprSimple RestoExpresion ;
RestoExpresion : OpRel ExprSimple ;
|
;
ExprSimple : Termino RestoSimple ;
| '+' Termino RestoSimple ;
| '-' Termino RestoSimple ;
RestoSimple : RestoSimple OpAdt Termino ;
|
;
Termino : Factor RestoTermino ;
RestoTermino : RestoTermino OpMul Factor ;
|
;
Factor : '(' Expresion ')' ;
| pId ;
| pCteEnt ;
| pCteDec ;
| pCteExp ;
| prNot Factor ;
OpRel :
|
|
|
|
|
OpAdt :
|
|
OpMul :
|
|
|
|

'<' ;
'=' ;
'>' ;
pMei ;
pMai ;
pDis ;
'+' ;
'-' ;
prOr ;
'*' ;
'/' ;
prMod ;
prDiv ;
prAnd ;

%%
main () {
if ( yyparse () == 0 ) {
printf ("\nAnalisis Lexico-Sintactico terminado.\n");
printf ("No se ha encontrado error alguno.\n\n");
}
}
yyerror (char *mensaje) {
printf ("\nMensaje proporcionado:\n");
printf (">>> %s\n\n", mensaje);
printf ("Linea actual : %d\n", yylineno);
printf ("Lexema actual: %s\n\n", yytext);
printf ("Analisis suspendido.\n\n");
}

Ejemplo 5

%%
[aA][nN][dD]
[aA][rR][rR][aA][yY]
[bB][eE][gG][iI][nN]
[cC][aA][sS][eE]
[cC][oO][nN][sS][tT]
[dD][iI][vV]
[dD][oO]
[dD][oO][wW][nN][tT][oO]
[eE][lL][sS][eE]
[eE][nN][dD]
[fF][iI][lL][eE]
[fF][oO][rR]
[fF][uU][nN][cC][tT][iI][oO][nN]
[gG][oO][tT][oO]
[iI][fF]
[iI][nN]
[lL][aA][bB][eE][lL]
[mM][oO][dD]
[nN][iI][lL]
[nN][oO][tT]
[oO][fF]
[oO][rR]
[pP][aA][cC][kK][eE][dD]
[pP][rR][oO][cC][eE][dD][uU][rR][eE]
[pP][rR][oO][gG][rR][aA][mM]
[rR][eE][cC][oO][rR][dD]
[rR][eE][pP][eE][aA][tT]
[sS][eE][tT]
[tT][hH][eE][nN]
[tT][oO]
[tT][yY][pP][eE]
[uU][nN][tT][iI][lL]
[vV][aA][rR]
[wW][hH][iI][lL][eE]
[wW][iI][tT][hH]
[a-zA-Z][a-zA-Z0-9]*
.|\n
%%
main () {
yylex ();
}

{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{

printf
printf
printf
printf
printf
printf
printf
printf
printf
printf
printf
printf
printf
printf
printf
printf
printf
printf
printf
printf
printf
printf
printf
printf
printf
printf
printf
printf
printf
printf
printf
printf
printf
printf
printf

("AND");
("ARRRAY");
("BEGIN");
("CASE");
("CONST");
("DIV");
("DO");
("DOWNTO");
("ELSE");
("END");
("FILE");
("FOR");
("FUNCTION");
("GOTO");
("IF");
("IN");
("LABEL");
("MOD");
("NIL");
("NOT");
("OF");
("OR");
("PACKED");
("PROCEDURE");
("PROGRAM");
("RECORD");
("REPEAT");
("SET");
("THEN");
("TO");
("TYPE");
("UNTIL");
("VAR");
("WHILE");
("WITH");

|
{ printf ("%s", yytext); }

}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}

Ejemplo 6

%%
;/[\ \t\n]*[eE][nN][dD]

{ printf (" "); }

%%
main () {
yylex ();
}

Ejemplo 7

%{
#include "y.tab.h"
char * losApell [50];
%}
espacio
palabra
numEnt
numDec
separa

[\ ]+
[a-zA-Z]+
[0-9]+
{numEnt}\,{numEnt}
[\ ]*;[\ ]*

%%
{palabra}({espacio}{palabra})+/{separa}
{
strcpy (losApell, yytext);
return apellidos;
}
{palabra}({espacio}{palabra})*/{espacio}
{
printf ("%s %s", yytext, losApell);
return nombre;
}
{separa}
{ return ptocoma; }
{numEnt}
{ printf (" >> %s,0\n", yytext); return nota; }
{numDec}
{ printf (" >> %s\n", yytext); return nota; }
\n
{ return limite; }
{espacio}
{ ; }
.
{ return yytext [0]; }

%{
extern yytext [];
%}
%token
%token
%token
%token
%token

nombre
apellidos
ptocoma
nota
limite

%start Lista
%%
Lista : Lista Linea ;
| Linea
;
Linea : apellidos ptocoma nombre nota limite ;
%%
main () {
yyparse ();
}
yyerror (char *mensaje) {
printf ("\n\n\nMensaje proporcionado:\n");
printf (">>> %s\n\n", mensaje);
printf ("Analisis suspendido.\n\n");
printf ("lexema: %s\n", yytext);
}

Intereses relacionados