100 lines
2.4 KiB
Plaintext
100 lines
2.4 KiB
Plaintext
%{
|
|
#ifndef NORCSID
|
|
static char rcsid2[]= "$Header$";
|
|
#endif
|
|
|
|
char *mystrcpy();
|
|
int myatoi();
|
|
|
|
int lineno=1;
|
|
extern char *filename;
|
|
%}
|
|
|
|
%%
|
|
"/*" { char c;
|
|
c = input(); if (c=='\n') lineno++;
|
|
do {
|
|
while (c!='*') {
|
|
c = input();
|
|
if (c=='\n') lineno++;
|
|
}
|
|
c = input();
|
|
if (c=='\n') lineno++;
|
|
} while (c!='/');
|
|
}
|
|
^\#[ \t]+[0-9]+[ \t]+\".*\"$ {
|
|
int ind,ind2;
|
|
lineno=atoi(yytext+1)-1;
|
|
for(ind=0;yytext[ind]!='"';ind++)
|
|
;
|
|
for(ind2=ind+1;yytext[ind2]!='"';ind2++)
|
|
;
|
|
yytext[ind2]=0;
|
|
if (strcmp(yytext+ind+1,filename)!=0)
|
|
filename=mystrcpy(yytext+ind+1);
|
|
}
|
|
[a-z]{3} { if (!emhere || (yylval.yy_int=mlookup(yytext))==0)
|
|
REJECT;
|
|
return(EMMNEM);
|
|
}
|
|
|
|
"==" return(CMPEQ);
|
|
"!=" return(CMPNE);
|
|
"<" return(CMPLT);
|
|
"<=" return(CMPLE);
|
|
">" return(CMPGT);
|
|
">=" return(CMPGE);
|
|
"||" return(OR2);
|
|
"&&" return(AND2);
|
|
"<<" return(LSHIFT);
|
|
">>" return(RSHIFT);
|
|
"!" return(NOT);
|
|
"~" return(COMP);
|
|
":ro" { yylval.yy_int = AD_RO; return(ADORNACCESS); }
|
|
":wo" { yylval.yy_int = AD_WO; return(ADORNACCESS); }
|
|
":rw" { yylval.yy_int = AD_RW; return(ADORNACCESS); }
|
|
":cc" { yylval.yy_int = AD_CC; return(ADORNCC); }
|
|
\$[0-9]+ { yylval.yy_int = atoi(yytext+1); return(DOLLAR); }
|
|
\%[0-9]+ { yylval.yy_int = atoi(yytext+1); return(PERCENT); }
|
|
\%[a-z] { yylval.yy_int = yytext[1]-'a'; return(ALLREG); }
|
|
[0-9]+|0x[0-9A-Fa-f]+ { yylval.yy_int = myatoi(yytext); return(NUMBER); }
|
|
[_A-Za-z][_A-Za-z0-9]* { register symbol *sy_p;
|
|
if ((sy_p=lookup(yytext,symkeyw,justlooking))!=0)
|
|
return(sy_p->sy_value.syv_keywno);
|
|
yylval.yy_str = mystrcpy(yytext); return(IDENT);
|
|
}
|
|
\%[_A-Za-z][_A-Za-z0-9]* { yylval.yy_str = mystrcpy(yytext+1);
|
|
return(PERC_IDENT);
|
|
}
|
|
\"[^"\n]*\" { yytext[yyleng-1]=0;
|
|
yylval.yy_str = mystrcpy(yytext+1);
|
|
return(STRING);
|
|
}
|
|
[0-9][bf] { yytext[2]=0;
|
|
yylval.yy_str = mystrcpy(yytext);
|
|
return(STRING);
|
|
}
|
|
\n { lineno++; }
|
|
[ \t]* ;
|
|
. return(yytext[0]);
|
|
%%
|
|
int skipping=0;
|
|
|
|
yywrap() {
|
|
|
|
if (skipping)
|
|
fatal("EOF reached during error recovery");
|
|
return(1);
|
|
}
|
|
|
|
skipupto(tok,str) char *str; {
|
|
register i;
|
|
|
|
skipping=1;
|
|
while (yylex()!=tok)
|
|
;
|
|
for(i=strlen(str); i>0; i--)
|
|
unput(str[i-1]);
|
|
skipping=0;
|
|
}
|