blob: b337995427cd0d5ced0f7ec074f1e696afb76f28 [file] [log] [blame]
FILE *infile;
static int cur_char=' ';
char tkname[MAXLEN];
int yylex()
{
char *p=tkname;
int tmp;
while(isspace(cur_char))
cur_char=getc(infile);
if(isdigit(cur_char)){
do{
*p++=cur_char;
cur_char=getc(infile);
}while(isdigit(cur_char));
if(cur_char=='.'){
*p++=cur_char;
cur_char=getc(infile);
while(isdigit(cur_char)){
*p++=cur_char;
cur_char=getc(infile);
}
}
*p++=0;
return TKNUMBER;
}
if(isalpha(cur_char)){
do{
*p++=cur_char;
cur_char=getc(infile);
}while(isalnum(cur_char));
*p++=0;
if(!strcmp(tkname,"int"))
return TKINT;
if(!strcmp(tkname,"real"))
return TKREAL;
if(!strcmp(tkname,"if"))
return TKIF;
if(!strcmp(tkname,"else"))
return TKELSE;
if(!strcmp(tkname,"while"))
return TKWHILE;
if(!strcmp(tkname,"return"))
return TKRETURN;
return TKIDENTIFIER;
}
tmp=cur_char;
cur_char=getc(infile);
if(tmp=='!'&&cur_char=='='){
cur_char=getc(infile);
return TKNEQ;
}
if(tmp=='<'&&cur_char=='='){
cur_char=getc(infile);
return TKLEQ;
}
if(tmp=='>'&&cur_char=='='){
cur_char=getc(infile);
return TKGEQ;
}
if(tmp=='&'&&cur_char=='&'){
cur_char=getc(infile);
return TKAND;
}
if(tmp=='|'&&cur_char=='|'){
cur_char=getc(infile);
return TKOR;
}
if(tmp==':'&&cur_char=='='){
cur_char=getc(infile);
return TKASSIGN;
}
return tmp;
}