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

77 lines
1.4 KiB
Plaintext

/* Lex spesification for asc2bog */
%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})?
string \"([^\"]|\\\")+\"
newline \n
whitespace [ \t\r]+
%%
"Ambient light color" { return AMBIENT_LIGHT_COLOR; }
"Solid background color" { return SOLID_BACKGROUND_COLOR; }
"Red" { return RED; }
"Green" { return GREEN; }
"Blue" { return BLUE; }
"Named object" { return NAMED_OBJECT; }
"Tri-mesh" { return TRIMESH; }
"Vertices" { return VERTICES; }
"Faces" { return FACES; }
"Mapped" { return MAPPED; }
"Vertex list" { return VERTEX_LIST; }
"Vertex" { return VERTEX; }
"Face list" { return FACE_LIST; }
"Face" { return FACE; }
"Material" { return MATERIAL; }
"Smoothing" { return SMOOTHING; }
"AB" { return AB; }
"BC" { return BC; }
"CA" { return CA; }
"=" { return ASSIGN; }
[:,XYZUVABC] { return yytext[0]; }
{nat} { return NUM; }
{floating} { return FLOAT; }
{string} { return STRING; }
{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