Bison
Ábrahám Gábor
abraham at plus7.hu
Fri Jun 13 08:46:32 CEST 2003
>
> Hali!
> Volt itt 2-3 ur, aki Bison-beli jartassagat nem titkolta el.
> Alapvetoen azt nem ertem, hogyan megy a Lex-Bison kozti
> parameter-atadas.
> Pl. Lex-nek eloirom, hogy label az, ami sor elejen indul es
> betuvel kezdodik, kettospont zarja.
> Aztan van egy name, ugyanugy betuvel indul, de nem zarja
> kettospont es akarhol indulhat, nem csak sor elejen.
>
> Na most hogyan tudja a Bison, hogy melyik - melyik volt,
> ha az egesz hercehurca utan csak egy stringre mutato pointert
> kap meg?
>
> Szoval van, aki nem csak erti, de ovodas szinten el is tudja
> magyarazni?
Probalok egy pelda felet kivagni :
(En yacc-ot hasznalok, de mindegy)
pelda.yac
---------------------------
...
%union { // itt irsz le minden tipust
long longv; // amit a lex vissza akar adni
char strv[100];
}
%token <longv> INT // itt sorolod fel a tokeneket, amit a
%token <strv> NAME // lex fel fog ismerni
%token <strv> LABEL
%token ON 1, OFF 2
%start program
%%
program: NAME
{
kiir($1); // ez kiirja a nevet, mint stringet
} // $i az i. parameter
| LABEL
{
kiir($1); // ez kiirja a cimket, mint stringet
}
;
....
#include "lexyy.c"
-------------------------------------
pelda.lex
0x[0-9a-fA-F]+ { // yytext a string, amit a lex felismert
sscanf(yytext,"%lx",&yylval.longv); // itt konvertalod a kert tipusra
return(INT); // itt mondja meg a lex, hogy mit ismert fel
}
{[0-9]}+ {
yylval.longv=atol(yytext);
return(INT);
}
[A-Z]([a-zA-Z_0-9]{0,7}) {
strcpy(yylval.strv,yytext);
yylval.strv[yyleng] = '\0';
return(NAME);
}
> Valamelyikukhoz lehetne hulye kerdeseket intezni maganban?
Kerdezz, ha tudok termeszetesen felelek
Gabor
------------------------------------------------------------------------
Ábrahám Gábor
7+ Számítógép Hálózati Kft. Tel : (06-1) 248-3214
1118, Budapest, Homoród u. 17. Fax : (06-1) 248-3216
More information about the Elektro
mailing list