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