home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
minnie.tuhs.org
/
unixen.tar
/
unixen
/
PDP-11
/
Distributions
/
ucb
/
spencer_2bsd.tar.gz
/
2bsd.tar
/
src
/
pxp
/
yyprint.c
< prev
next >
Wrap
C/C++ Source or Header
|
1980-02-17
|
2KB
|
98 lines
/* Copyright (c) 1979 Regents of the University of California */
#
/*
* pi - Pascal interpreter code translator
*
* Charles Haley, Bill Joy UCB
* Version 1.2 January 1979
*
*
* pxp - Pascal execution profiler
*
* Bill Joy UCB
* Version 1.2 January 1979
*/
#include "0.h"
#include "yy.h"
long tokname();
STATIC char bounce;
/*
* Printing representation of a
* "character" - a lexical token
* not in a yytok structure.
*/
long
charname(ch)
int ch;
{
struct yytok Ych;
Ych.Yychar = ch;
Ych.Yylval = nullsem(ch);
return (tokname(&Ych));
}
/*
* Printing representation of a token
*/
long
tokname(tp)
register struct yytok *tp;
{
register char *cp;
register struct kwtab *kp;
long l;
(&l)->pint2 = "";
switch (tp->Yychar) {
case YCASELAB:
cp = "case-label";
break;
case YEOF:
cp = "end-of-file";
break;
case YILLCH:
cp = "illegal character";
break;
case 256:
/* error token */
cp = "error";
break;
case YID:
cp = "identifier";
break;
case YNUMB:
cp = "real number";
break;
case YINT:
case YBINT:
cp = "number";
break;
case YSTRING:
cp = tp->Yylval;
cp = cp == NIL || cp[1] == 0 ? "character" : "string";
break;
case YDOTDOT:
cp = "'..'";
break;
default:
if (tp->Yychar < 256) {
cp = "'x'\0'x'";
if (bounce = ((bounce + 1) & 1))
cp =+ 4;
cp[1] = tp->Yychar;
break;
}
for (kp = yykey; kp->kw_str != NIL && kp->kw_val != tp->Yychar; kp++)
continue;
cp = "keyword ";
(&l)->pint2 = kp->kw_str;
}
(&l)->pint = cp;
return (l);
}