case '.':
c = Bgetc(bin);
Ungetc(c);
if(isdigit(c))
return numsym('.');
return '.';
case '(':
case ')':
case '[':
case ']':
case ';':
case ':':
case ',':
case '~':
case '?':
case '*':
case '@':
case '^':
case '%':
return c;
case '{':
stacked++;
return c;
case '}':
stacked--;
return c;
case '!':
c = Bgetc(bin);
if(c == '=')
return Tneq;
Ungetc(c);
return '!';
case '+':
c = Bgetc(bin);
if(c == '+')
return Tinc;
Ungetc(c);
return '+';
case '/':
c = Bgetc(bin);
if(c == '/') {
eatnl();
goto loop;
}
Ungetc(c);
return '/';
case '\'':
c = Bgetc(bin);
if(c == '\\')
yylval.ival = escchar(Bgetc(bin));
else
yylval.ival = c;
c = Bgetc(bin);
if(c != '\'') {
error("missing '");
Ungetc(c);
}
return Tconst;
case '&':
c = Bgetc(bin);
if(c == '&')
return Tandand;
Ungetc(c);
return '&';
case '=':
c = Bgetc(bin);
if(c == '=')
return Teq;
Ungetc(c);
return '=';
case '|':
c = Bgetc(bin);
if(c == '|')
return Toror;
Ungetc(c);
return '|';
case '<':
c = Bgetc(bin);
if(c == '=')
return Tleq;
if(c == '<')
return Tlsh;
Ungetc(c);
return '<';
case '>':
c = Bgetc(bin);
if(c == '=')
return Tgeq;
if(c == '>')
return Trsh;
Ungetc(c);
return '>';
case '-':
c = Bgetc(bin);
if(c == '>')
return Tindir;
if(c == '-')
return Tdec;
Ungetc(c);
return '-';
default:
return numsym(c);
}
}
int
numsym(char first)
{
int c, isfloat, ishex;
char *sel, *p;
Lsym *s;