99 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			99 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
%{
 | 
						|
#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; 
 | 
						|
}
 |