/* Lex spesification for geo2bog */ %option noyywrap %o 4000 %{ #define YYLEX #include "globals.h" int lineno; char tokenString[MAXTOKENLEN+1]; %} digit [0-9] nat {digit}+ signedNat ("+"|"-")?{nat} floating {signedNat}("."{nat})?(E{signedNat})? string \"([^\"]|\\\")+\" comment #[^\n]* newline \n whitespace [ \t\r]+ %% "GEO" { return GEO; } "Version" { return FILEVERSION; } "Geometry" { return GEOMETRY ; } "Name" { return NAME ; } "VertexList" { return VERTEXLIST ; } "NormalList" { return NORMALLIST ; } "TexCoordList" { return TEXCOORDLIST ; } "Vertex" { return VERTEX ; } "Normal" { return NORMAL ; } "TexCoord" { return TEXCOORD ; } "Polygon" { return POLYGON ; } "Type" { return TYPE ; } "POLYGON" { return POLYGON ; } "TRIANGLES" { return TRIANGLES ; } "QUADS" { return QUADS ; } "QUAD_STRIP" { return QUAD_STRIP ; } "TRIANGLE_STRIP" { return TRIANGLE_STRIP ; } "TRIANGLE_FAN" { return TRIANGLE_FAN ; } "Material" { return MATERIAL ; } "=" { return ASSIGN ; } [;,()\[\]{}] { return yytext[0]; } {nat} { return NUM; } {floating} { return FLOAT; } {string} { return STRING; } {comment} { /* Skip */ } {whitespace} { /* Skip */ } {newline} { lineno++; } . { return ERROR; } %% TokenType getToken(){ TokenType currentToken; static int firstTime = TRUE; if (firstTime){ firstTime = FALSE; yyin = source; lineno++; } currentToken = yylex(); strncpy(tokenString,yytext,MAXTOKENLEN); return currentToken; } #if 0 /* ndef LINUX */ int yywrap(void){ return 1; } #endif