home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.cs.arizona.edu
/
ftp.cs.arizona.edu.tar
/
ftp.cs.arizona.edu
/
icon
/
historic
/
v941.tgz
/
icon.v941src.tar
/
icon.v941src
/
src
/
common
/
lextab.h
< prev
next >
Wrap
C/C++ Source or Header
|
2002-01-18
|
21KB
|
577 lines
/*
* NOTE: this file is generated automatically by mktoktab
* from tokens.txt and op.txt.
*/
/*
* Token table - contains an entry for each token type
* with printable name of token, token type, and flags
* for semicolon insertion.
*/
struct toktab toktab[] = {
/* token token type flags */
/* primitives */
"identifier", IDENT, Beginner+Ender, /* 0 */
"integer-literal", INTLIT, Beginner+Ender, /* 1 */
"real-literal", REALLIT, Beginner+Ender, /* 2 */
"string-literal", STRINGLIT, Beginner+Ender, /* 3 */
"cset-literal", CSETLIT, Beginner+Ender, /* 4 */
"end-of-file", EOFX, 0, /* 5 */
/* reserved words */
"break", BREAK, Beginner+Ender, /* 6 */
"by", BY, 0, /* 7 */
"case", CASE, Beginner, /* 8 */
"create", CREATE, Beginner, /* 9 */
"default", DEFAULT, Beginner, /* 10 */
"do", DO, 0, /* 11 */
"else", ELSE, 0, /* 12 */
"end", END, Beginner, /* 13 */
"every", EVERY, Beginner, /* 14 */
"fail", FAIL, Beginner+Ender, /* 15 */
"global", GLOBAL, 0, /* 16 */
"if", IF, Beginner, /* 17 */
"initial", INITIAL, Beginner, /* 18 */
"invocable", INVOCABLE, 0, /* 19 */
"link", LINK, 0, /* 20 */
"local", LOCAL, Beginner, /* 21 */
"next", NEXT, Beginner+Ender, /* 22 */
"not", NOT, Beginner, /* 23 */
"of", OF, 0, /* 24 */
"procedure", PROCEDURE, 0, /* 25 */
"record", RECORD, 0, /* 26 */
"repeat", REPEAT, Beginner, /* 27 */
"return", RETURN, Beginner+Ender, /* 28 */
"static", STATIC, Beginner, /* 29 */
"suspend", SUSPEND, Beginner+Ender, /* 30 */
"then", THEN, 0, /* 31 */
"to", TO, 0, /* 32 */
"until", UNTIL, Beginner, /* 33 */
"while", WHILE, Beginner, /* 34 */
"end-of-file", 0, 0,
};
/*
* restab[c] points to the first reserved word in toktab which
* begins with the letter c.
*/
struct toktab *restab[] = {
NULL, &toktab[ 6], &toktab[ 8], &toktab[10], /* 61-64 abcd */
&toktab[12], &toktab[15], &toktab[16], NULL, /* 65-68 efgh */
&toktab[17], NULL, NULL, &toktab[20], /* 69-6C ijkl */
NULL, &toktab[22], &toktab[24], &toktab[25], /* 6D-70 mnop */
NULL, &toktab[26], &toktab[29], &toktab[31], /* 71-74 qrst */
&toktab[33], NULL, &toktab[34], NULL, /* 75-78 uvwx */
NULL, NULL, /* 79-7A yz */
};
/*
* The operator table acts to extend the token table, it
* indicates what implementations are expected from rtt,
* and it has pointers for the implementation information.
*/
struct optab optab[] = {
{{"!", BANG, Beginner}, Unary, NULL, NULL}, /* 0 */
{{"%", MOD, 0}, Binary, NULL, NULL}, /* 1 */
{{"%:=", AUGMOD, 0}, 0, NULL, NULL}, /* 2 */
{{"&", AND, Beginner}, Binary, NULL, NULL}, /* 3 */
{{"&:=", AUGAND, 0}, 0, NULL, NULL}, /* 4 */
{{"*", STAR, Beginner}, Unary | Binary, NULL, NULL}, /* 5 */
{{"*:=", AUGSTAR, 0}, 0, NULL, NULL}, /* 6 */
{{"**", INTER, Beginner}, Binary, NULL, NULL}, /* 7 */
{{"**:=", AUGINTER, 0}, 0, NULL, NULL}, /* 8 */
{{"+", PLUS, Beginner}, Unary | Binary, NULL, NULL}, /* 9 */
{{"+:=", AUGPLUS, 0}, 0, NULL, NULL}, /* 10 */
{{"++", UNION, Beginner}, Binary, NULL, NULL}, /* 11 */
{{"++:=", AUGUNION, 0}, 0, NULL, NULL}, /* 12 */
{{"-", MINUS, Beginner}, Unary | Binary, NULL, NULL}, /* 13 */
{{"-:=", AUGMINUS, 0}, 0, NULL, NULL}, /* 14 */
{{"--", DIFF, Beginner}, Binary, NULL, NULL}, /* 15 */
{{"--:=", AUGDIFF, 0}, 0, NULL, NULL}, /* 16 */
{{".", DOT, Beginner}, Unary, NULL, NULL}, /* 17 */
{{"/", SLASH, Beginner}, Unary | Binary, NULL, NULL}, /* 18 */
{{"/:=", AUGSLASH, 0}, 0, NULL, NULL}, /* 19 */
{{":=", ASSIGN, 0}, Binary, NULL, NULL}, /* 20 */
{{":=:", SWAP, 0}, Binary, NULL, NULL}, /* 21 */
{{"<", NMLT, 0}, Binary, NULL, NULL}, /* 22 */
{{"<:=", AUGNMLT, 0}, 0, NULL, NULL}, /* 23 */
{{"<-", REVASSIGN, 0}, Binary, NULL, NULL}, /* 24 */
{{"<->", REVSWAP, 0}, Binary, NULL, NULL}, /* 25 */
{{"<<", SLT, 0}, Binary, NULL, NULL}, /* 26 */
{{"<<:=", AUGSLT, 0}, 0, NULL, NULL}, /* 27 */
{{"<<=", SLE, 0}, Binary, NULL, NULL}, /* 28 */
{{"<<=:=", AUGSLE, 0}, 0, NULL, NULL}, /* 29 */
{{"<=", NMLE, 0}, Binary, NULL, NULL}, /* 30 */
{{"<=:=", AUGNMLE, 0}, 0, NULL, NULL}, /* 31 */
{{"=", NMEQ, Beginner}, Unary | Binary, NULL, NULL}, /* 32 */
{{"=:=", AUGNMEQ, 0}, 0, NULL, NULL}, /* 33 */
{{"==", SEQ, Beginner}, Binary, NULL, NULL}, /* 34 */
{{"==:=", AUGSEQ, 0}, 0, NULL, NULL}, /* 35 */
{{"===", EQUIV, Beginner}, Binary, NULL, NULL}, /* 36 */
{{"===:=", AUGEQUIV, 0}, 0, NULL, NULL}, /* 37 */
{{">", NMGT, 0}, Binary, NULL, NULL}, /* 38 */
{{">:=", AUGNMGT, 0}, 0, NULL, NULL}, /* 39 */
{{">=", NMGE, 0}, Binary, NULL, NULL}, /* 40 */
{{">=:=", AUGNMGE, 0}, 0, NULL, NULL}, /* 41 */
{{">>", SGT, 0}, Binary, NULL, NULL}, /* 42 */
{{">>:=", AUGSGT, 0}, 0, NULL, NULL}, /* 43 */
{{">>=", SGE, 0}, Binary, NULL, NULL}, /* 44 */
{{">>=:=", AUGSGE, 0}, 0, NULL, NULL}, /* 45 */
{{"?", QMARK, Beginner}, Unary, NULL, NULL}, /* 46 */
{{"?:=", AUGQMARK, 0}, 0, NULL, NULL}, /* 47 */
{{"@", AT, Beginner}, 0, NULL, NULL}, /* 48 */
{{"@:=", AUGAT, 0}, 0, NULL, NULL}, /* 49 */
{{"\\", BACKSLASH, Beginner}, Unary, NULL, NULL}, /* 50 */
{{"^", CARET, Beginner}, Unary | Binary, NULL, NULL}, /* 51 */
{{"^:=", AUGCARET, 0}, 0, NULL, NULL}, /* 52 */
{{"|", BAR, Beginner}, 0, NULL, NULL}, /* 53 */
{{"||", CONCAT, Beginner}, Binary, NULL, NULL}, /* 54 */
{{"||:=", AUGCONCAT, 0}, 0, NULL, NULL}, /* 55 */
{{"|||", LCONCAT, Beginner}, Binary, NULL, NULL}, /* 56 */
{{"|||:=", AUGLCONCAT, 0}, 0, NULL, NULL}, /* 57 */
{{"~", TILDE, Beginner}, Unary, NULL, NULL}, /* 58 */
{{"~=", NMNE, Beginner}, Binary, NULL, NULL}, /* 59 */
{{"~=:=", AUGNMNE, 0}, 0, NULL, NULL}, /* 60 */
{{"~==", SNE, Beginner}, Binary, NULL, NULL}, /* 61 */
{{"~==:=", AUGSNE, 0}, 0, NULL, NULL}, /* 62 */
{{"~===", NEQUIV, Beginner}, Binary, NULL, NULL}, /* 63 */
{{"~===:=", AUGNEQUIV, 0}, 0, NULL, NULL}, /* 64 */
{{"(", LPAREN, Beginner}, 0, NULL, NULL}, /* 65 */
{{")", RPAREN, Ender}, 0, NULL, NULL}, /* 66 */
{{"+:", PCOLON, 0}, 0, NULL, NULL}, /* 67 */
{{",", COMMA, 0}, 0, NULL, NULL}, /* 68 */
{{"-:", MCOLON, 0}, 0, NULL, NULL}, /* 69 */
{{":", COLON, 0}, 0, NULL, NULL}, /* 70 */
{{";", SEMICOL, 0}, 0, NULL, NULL}, /* 71 */
{{"[", LBRACK, Beginner}, 0, NULL, NULL}, /* 72 */
{{"]", RBRACK, Ender}, 0, NULL, NULL}, /* 73 */
{{"{", LBRACE, Beginner}, 0, NULL, NULL}, /* 74 */
{{"}", RBRACE, Ender}, 0, NULL, NULL}, /* 75 */
{{"$(", LBRACE, Beginner}, 0, NULL, NULL}, /* 76 */
{{"$)", RBRACE, Ender}, 0, NULL, NULL}, /* 77 */
{{"$<", LBRACK, Beginner}, 0, NULL, NULL}, /* 78 */
{{"$>", RBRACK, Ender}, 0, NULL, NULL}, /* 79 */
{{NULL, 0, 0}, 0, NULL, NULL}
};
int asgn_loc = 20;
int semicol_loc = 71;
int plus_loc = 9;
int minus_loc = 13;
/*
* getopr - find the longest legal operator and return the
* index to its entry in the operator table.
*/
int getopr(ac, cc)
int ac;
int *cc;
{
register char c;
*cc = ' ';
switch (c = ac) {
case '!':
return 0; /* ! */
case '$':
switch (c = NextChar) {
case '(':
return 76; /* $( */
case ')':
return 77; /* $) */
case '<':
return 78; /* $< */
case '>':
return 79; /* $> */
}
break;
case '%':
if ((c = NextChar) == ':') {
if ((c = NextChar) == '=') {
return 2; /* %:= */
}
}
else {
*cc = c;
return 1; /* % */
}
break;
case '&':
if ((c = NextChar) == ':') {
if ((c = NextChar) == '=') {
return 4; /* &:= */
}
}
else {
*cc = c;
return 3; /* & */
}
break;
case '(':
return 65; /* ( */
case ')':
return 66; /* ) */
case '*':
switch (c = NextChar) {
case '*':
if ((c = NextChar) == ':') {
if ((c = NextChar) == '=') {
return 8; /* **:= */
}
}
else {
*cc = c;
return 7; /* ** */
}
break;
case ':':
if ((c = NextChar) == '=') {
return 6; /* *:= */
}
break;
default:
*cc = c;
return 5; /* * */
}
break;
case '+':
switch (c = NextChar) {
case '+':
if ((c = NextChar) == ':') {
if ((c = NextChar) == '=') {
return 12; /* ++:= */
}
}
else {
*cc = c;
return 11; /* ++ */
}
break;
case ':':
if ((c = NextChar) == '=') {
return 10; /* +:= */
}
else {
*cc = c;
return 67; /* +: */
}
default:
*cc = c;
return 9; /* + */
}
break;
case ',':
return 68; /* , */
case '-':
switch (c = NextChar) {
case '-':
if ((c = NextChar) == ':') {
if ((c = NextChar) == '=') {
return 16; /* --:= */
}
}
else {
*cc = c;
return 15; /* -- */
}
break;
case ':':
if ((c = NextChar) == '=') {
return 14; /* -:= */
}
else {
*cc = c;
return 69; /* -: */
}
default:
*cc = c;
return 13; /* - */
}
break;
case '.':
return 17; /* . */
case '/':
if ((c = NextChar) == ':') {
if ((c = NextChar) == '=') {
return 19; /* /:= */
}
}
else {
*cc = c;
return 18; /* / */
}
break;
case ':':
if ((c = NextChar) == '=') {
if ((c = NextChar) == ':') {
return 21; /* :=: */
}
else {
*cc = c;
return 20; /* := */
}
}
else {
*cc = c;
return 70; /* : */
}
case ';':
return 71; /* ; */
case '<':
switch (c = NextChar) {
case '-':
if ((c = NextChar) == '>') {
return 25; /* <-> */
}
else {
*cc = c;
return 24; /* <- */
}
case ':':
if ((c = NextChar) == '=') {
return 23; /* <:= */
}
break;
case '<':
switch (c = NextChar) {
case ':':
if ((c = NextChar) == '=') {
return 27; /* <<:= */
}
break;
case '=':
if ((c = NextChar) == ':') {
if ((c = NextChar) == '=') {
return 29; /* <<=:= */
}
}
else {
*cc = c;
return 28; /* <<= */
}
break;
default:
*cc = c;
return 26; /* << */
}
break;
case '=':
if ((c = NextChar) == ':') {
if ((c = NextChar) == '=') {
return 31; /* <=:= */
}
}
else {
*cc = c;
return 30; /* <= */
}
break;
default:
*cc = c;
return 22; /* < */
}
break;
case '=':
switch (c = NextChar) {
case ':':
if ((c = NextChar) == '=') {
return 33; /* =:= */
}
break;
case '=':
switch (c = NextChar) {
case ':':
if ((c = NextChar) == '=') {
return 35; /* ==:= */
}
break;
case '=':
if ((c = NextChar) == ':') {
if ((c = NextChar) == '=') {
return 37; /* ===:= */
}
}
else {
*cc = c;
return 36; /* === */
}
break;
default:
*cc = c;
return 34; /* == */
}
break;
default:
*cc = c;
return 32; /* = */
}
break;
case '>':
switch (c = NextChar) {
case ':':
if ((c = NextChar) == '=') {
return 39; /* >:= */
}
break;
case '=':
if ((c = NextChar) == ':') {
if ((c = NextChar) == '=') {
return 41; /* >=:= */
}
}
else {
*cc = c;
return 40; /* >= */
}
break;
case '>':
switch (c = NextChar) {
case ':':
if ((c = NextChar) == '=') {
return 43; /* >>:= */
}
break;
case '=':
if ((c = NextChar) == ':') {
if ((c = NextChar) == '=') {
return 45; /* >>=:= */
}
}
else {
*cc = c;
return 44; /* >>= */
}
break;
default:
*cc = c;
return 42; /* >> */
}
break;
default:
*cc = c;
return 38; /* > */
}
break;
case '?':
if ((c = NextChar) == ':') {
if ((c = NextChar) == '=') {
return 47; /* ?:= */
}
}
else {
*cc = c;
return 46; /* ? */
}
break;
case '@':
if ((c = NextChar) == ':') {
if ((c = NextChar) == '=') {
return 49; /* @:= */
}
}
else {
*cc = c;
return 48; /* @ */
}
break;
case '[':
return 72; /* [ */
case '\\':
return 50; /* \ */
case ']':
return 73; /* ] */
case '^':
if ((c = NextChar) == ':') {
if ((c = NextChar) == '=') {
return 52; /* ^:= */
}
}
else {
*cc = c;
return 51; /* ^ */
}
break;
case '{':
return 74; /* { */
case '|':
if ((c = NextChar) == '|') {
switch (c = NextChar) {
case ':':
if ((c = NextChar) == '=') {
return 55; /* ||:= */
}
break;
case '|':
if ((c = NextChar) == ':') {
if ((c = NextChar) == '=') {
return 57; /* |||:= */
}
}
else {
*cc = c;
return 56; /* ||| */
}
break;
default:
*cc = c;
return 54; /* || */
}
}
else {
*cc = c;
return 53; /* | */
}
break;
case '}':
return 75; /* } */
case '~':
if ((c = NextChar) == '=') {
switch (c = NextChar) {
case ':':
if ((c = NextChar) == '=') {
return 60; /* ~=:= */
}
break;
case '=':
switch (c = NextChar) {
case ':':
if ((c = NextChar) == '=') {
return 62; /* ~==:= */
}
break;
case '=':
if ((c = NextChar) == ':') {
if ((c = NextChar) == '=') {
return 64; /* ~===:= */
}
}
else {
*cc = c;
return 63; /* ~=== */
}
break;
default:
*cc = c;
return 61; /* ~== */
}
break;
default:
*cc = c;
return 59; /* ~= */
}
}
else {
*cc = c;
return 58; /* ~ */
}
break;
}
tfatal("invalid character", (char *)NULL);
return -1;
}