4 static char rcsid2[]="$Id: bootlex.l,v 2.10 1994/06/24 10:16:08 ceriel Exp $";
7 * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
8 * See the copyright notice in the ACK home directory, in the file "Copyright".
10 * Author: Hans van Staveren
39 "REGISTERS:" return(REGISTERHEAD);
40 "TOKENS:" return(TOKENHEAD);
41 "TOKENEXPRESSIONS:" return(EXPRESSIONHEAD);
42 "CODE:" return(CODEHEAD);
43 "MOVES:" return(MOVEHEAD);
44 "TESTS:" return(TESTHEAD);
45 "STACKS:" return(STACKHEAD);
46 "SIZEFACTOR" return(SIZEFAC);
47 "TIMEFACTOR" return(TIMEFAC);
48 "FORMAT" return(FORMAT);
51 "remove" return(REMOVE);
53 "samesign" return(SAMESIGN);
54 "inreg" return(INREG);
57 "defined" return(DEFINED);
60 "highw" return(HIGHW);
62 "erase" return(ERASE);
63 "allocate" return(ALLOCATE);
64 "tostring" return(TOSTRING);
66 "setcc" return(SETCC);
67 "samecc" return(SAMECC);
69 "STACK" return(STACK);
70 "nocoercions" return(NOCOERC);
86 EM_WSIZE { yylval.yy_intp = &wsize; return(CIDENT); }
87 EM_PSIZE { yylval.yy_intp = &psize; return(CIDENT); }
88 EM_BSIZE { yylval.yy_intp = &bsize; return(CIDENT); }
89 REGISTER { yylval.yy_string = "REGISTER"; return(TYPENAME); }
90 INT { yylval.yy_string = "INT"; return(TYPENAME); }
91 STRING { yylval.yy_string = "STRING"; return(TYPENAME); }
93 regvar return(REGVAR);
95 pointer return(POINTER);
97 return return(RETURN);
99 [_A-Za-z][_A-Za-z0-9]+ {register ident_p ip;
100 if(!lookident || (ip=ilookup(yytext,JUSTLOOKING))==0) {
101 yylval.yy_string = scopy(yytext);return(IDENT);
103 yylval.yy_ident = ip;
106 case IREG:return(RIDENT);
107 case IPRP:return(PIDENT);
108 case ITOK:return(TIDENT);
109 case IEXP:return(EIDENT);
113 [a-z] {yylval.yy_char = yytext[0]; return(LCASELETTER);}
114 [0-9]* {yylval.yy_int = atoi(yytext);return(NUMBER);}
115 (\"|"%)") { char *p; int c,tipe; char stringbuf[BUFSIZ];
120 default: *p++=c;break;
122 *p++=c; *p++=input(); break;
124 yyerror("Unterminated string");
128 tipe=STRING; goto endstr;
132 tipe=LSTRING;goto endstr;
134 *p++ = '%'; unput(c); break;
140 yylval.yy_string = scopy(stringbuf);
143 ^\#(line)?[ \t]*[0-9]+[ \t]+\".*\".*$ {
145 for (ind=0; yytext[ind] < '0' || yytext[ind]>'9'; ind++)
147 lineno=atoi(&yytext[ind])-1;
148 for(;yytext[ind]!='"';ind++)
150 for(ind2=ind+1;yytext[ind2]!='"';ind2++)
153 if (!iname || strcmp(yytext+ind+1,iname)!=0)
154 iname=scopy(yytext+ind+1);
161 yyerror(s,a1,a2,a3,a4) string s; {
163 fprintf(stderr,"\"%s\", line %d:",iname ? iname : "",lineno);
164 fprintf(stderr,s,a1,a2,a3,a4);
165 fprintf(stderr,"\n");