Files
pcas/src/as/asLib_lex.l
Marty Kraimer 07362375e4 asLib_lex.l changed to allow more characters(like dbLoadxxx)
Fixed bug that could cause deadlock when an ASG field is changed at run time.
1998-05-20 20:59:13 +00:00

74 lines
1.5 KiB
Plaintext

integer [0-9]
name [a-zA-Z0-9_\-:\.\[\]<>;]
notquote [^\"]
escapequote \\\"
string {notquote}|{escapequote}
%{
static ASINPUTFUNCPTR *my_yyinput;
#undef YY_INPUT
#define YY_INPUT(b,r,ms) (r=(*my_yyinput)(b,ms))
static int yyreset()
{
line_num=1;
BEGIN INITIAL;
return(0);
}
%}
%%
UAG {return(tokenUAG);}
HAG {return(tokenHAG);}
ASG {return(tokenASG);}
RULE {return(tokenRULE);}
CALC {return(tokenCALC);}
INP[A-L] {/* If A-L is changed then ASMAXINP must also be changed*/
yylval.Int = (unsigned char)yytext[3];
yylval.Int -= 'A';
return(tokenINP);
}
{integer}+ {
sscanf(yytext,"%d",&yylval.Int);
return(tokenINTEGER);
}
{name}+ { /*unquoted string*/
yylval.Str=(char *)asCalloc(1,strlen(yytext)+1);
strcpy(yylval.Str,yytext);
return(tokenNAME);
}
\"{string}*\" { /*quoted string*/
yylval.Str=(char *)asCalloc(1,strlen(yytext)+1);
/* making sure that neither double quote gets passed back */
strcpy(yylval.Str,yytext+1);
yylval.Str[strlen(yylval.Str)-1] = '\0';
return(tokenSTRING);
}
"{" { return(yytext[0]); }
"}" { return(yytext[0]); }
"(" { return(yytext[0]); }
")" { return(yytext[0]); }
"," { return(yytext[0]); }
^#.*
[ \t\r] ;
\n { line_num ++;}
. {
char message[20];
YY_BUFFER_STATE *dummy=0;
sprintf(message,"invalid character '%c'",yytext[0]);
yyerror(message);
/*The following suppresses compiler warning messages*/
if(FALSE) yyunput('c',message);
if(FALSE) yy_switch_to_buffer(*dummy);
}
%%