next up previous contents
Next: parser_y.y Up: Parser Previous: Datenformat

 

parser_l.l

Eine Einführung in Lex und Yacc ist im Anhang A Seite gif ff zu finden.

Definitionsteil

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).

Regeln

;.*                  /* 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.hgif) 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.

Hilfsprozeduren

yywrap() { return 1; }



Martin Frey
Tue Jun 17 13:29:20 MET DST 1997