Eine Einführung in Lex und Yacc ist im Anhang A Seite
ff zu finden.
fractional_constant ([0-9]*"."[0-9]+)|([0-9]+".")
exponent_part [eE][-+]?[0-9]+
floating_constant [-+]?({fractional_constant}{exponent_part}?
|[0-9]+{exponent_part})
definieren eine Fliesskommazahl.
identifier [a-zA-Z_][0-9a-zA-Z_]*definieren einen Identifier (den Szenennamen).
;.* /* ignore comment */ ; [ \t\r\n]+ /* ignore space, newline, etc. */ ;Diese beiden Regeln lösen keine Aktion aus, das heisst, sie werden ignoriert.
begin return BEGIN_; points return POINTS; polygons return POLYGONS; background return BACKGROUND; viewpoint return VIEWPOINT; viewmatrix return VIEWMATRIX; end return END;Diese Regeln geben die Tokens (definiert in y.tab.h
) für die Schlüsselwörter zurück.
[-+]?[0-9]+ { yylval.long_val = strtol(yytext, NULL, 10);
return INT_CONST; }
"0"[xX][0-9a-fA-F]+ { yylval.long_val = strtol(yytext, NULL, 16);
return INT_CONST; }
Diese Regeln geben eine Integerkonstante zurück.
{floating_constant} { yylval.float_val = atof(yytext); return FLOAT_CONST; }
Regeln für eine Fliesskommakonstante.
{identifier} { yylval.string = yytext; return IDENTIFIER; };
Regel für einen Identifier.
. return *yytext; /* comma */Regeln für alle übrigen Zeichen ausser Newline. Diese Zeichen werden als Token weitergegeben. Damit wird das Komma als Token erkannt.
yywrap() { return 1; }