Files
pvvmud/util/geo2bog/geo_scan.l
2025-03-05 08:37:43 +01:00

81 lines
1.5 KiB
Plaintext

/* 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