This commit is contained in:
Oliver Lehmann 1990-01-15 12:03:05 +00:00
parent 9322ee6870
commit 0c70a330b3
3 changed files with 508 additions and 0 deletions

View File

@ -0,0 +1,190 @@
/*
** SCANNER KEYWORD AND OPERATOR TABLES
**
** Keywords, Tokens, and Opcode tuples are included
** in this file the keyword table MUST be in sorted
** order. The operator table does not need to be
** sorted.
*/
OPTAB Keyword[] =
{
/* term token opcode
** -------------------------------------- */
# ifdef PAGE_LOCKING
"abort", ABORT, 0,
# endif
"and", COMMA, 0,
"append", APPEND, 0,
"auto", ALLOC, opAUTO,
"break", GOTO, 1,
"char", TYPE, opSTRING,
"close", CLOSE, 0,
"closedb", EXIT, 0,
"commit", COMMIT, 0,
"continue", GOTO, 0,
"daba", DBS, M_EXCL,
# ifdef PAGE_LOCKING
"deadlock", DEADLK, 0,
# endif
"delete", DELETE, 0,
"double", TYPE, opDOUBLE,
"endretrieve", GOTO, 1,
"exclusive", DBS, M_EXCL,
# ifdef AMX_SC
"export", EXPORT, 0,
# endif
"extern", ALLOC, opEXTERN,
# ifndef EBCDIC
"f4", TYPE,
# ifdef NO_F4
opDOUBLE,
# else
opFLT,
# endif
"f8", TYPE, opDOUBLE,
# endif
"float", TYPE,
# ifdef NO_F4
opDOUBLE,
# else
opFLT,
# endif
# ifdef EBCDIC
"f4", TYPE,
# ifdef NO_F4
opDOUBLE,
# else
opFLT,
# endif
"f8", TYPE, opDOUBLE,
# endif
"get", GET, 0,
"group", USER, 1,
# ifndef EBCDIC
"i1", TYPE, opINT,
"i2", TYPE, opINT,
"i4", TYPE, opLONG,
# endif
# ifdef PAGE_LOCKING
"if", IF, 0,
# endif
# ifdef AMX_SC
"import", IMPORT, 0,
# endif
"ing_db", DBS, M_EXCL,
"insert", INSERT, 0,
"int", TYPE,
# ifdef BIT_32
opLONG,
# else
opINT,
# endif
# ifdef EBCDIC
"i1", TYPE, opINT,
"i2", TYPE, opINT,
"i4", TYPE, opLONG,
# endif
# ifdef PAGE_LOCKING
"level", LEVEL, 0,
# endif
"long", TYPE, opLONG,
# ifdef PAGE_LOCKING
"maxlocks", MAXLK, 0,
# endif
"nextretrieve", GOTO, 0,
"nolock", DBS, 0,
"open", OPEN, 0,
"over", OVER, 0,
# ifdef PAGE_LOCKING
"page", RL_PG, M_REL,
# endif
"permit", PERMIT, 0,
"print", PRINT, 0,
# ifdef PAGE_LOCKING
"readlock", READLK, 0,
# endif
"replace", REPLACE, 0,
"retrieve", SCAN, 0,
"scan", SCAN, 0,
"shared", DBS, M_SHARE,
"short", TYPE, opINT,
"static", ALLOC, opSTATIC,
# ifdef PAGE_LOCKING
"table", RL_PG, 0,
# endif
"tid", TYPE, opLONG,
# ifdef PAGE_LOCKING
"timeout", TIMEOUT, 0,
# endif
"tuplecount", COUNT, 0,
"tuplelength", LENGTH, 0,
"use", USE, 0,
"user", USER, 0,
# ifdef PAGE_LOCKING
"with", WITH, 0,
# endif
/* -------------------------------------- */
};
int Keyent = sizeof Keyword / sizeof Keyword[0];
OPTAB Optab[] =
{
/* PUNCTUATION
** --------------------------------------
** term token opcode
** -------------------------------------- */
"(", LPAREN, 0,
")", RPAREN, 0,
"{", LBRACE, 0,
"}", RBRACE, 0,
"[", LBRKT, 0,
"]", RBRKT, 0,
"\/\*", BGNCMNT, 0,
"\*\/", ENDCMNT, 0,
"\"", SCONST, 0,
"$", DOM, 0,
"+", PLUS, 0,
"-", MINUS, 0,
",", COMMA, 0,
";", SEMICOL, 0,
"*", STAR, 0,
/* --------------------------------------
**
** BOUNDS OPERATORS
** --------------------------------------
** term token opcode
** -------------------------------------- */
">", BDOP, AP_GT,
">=", BDOP, AP_GT | AP_GE,
"<", BDOP, AP_LT,
"<=", BDOP, AP_LT | AP_LE,
/* --------------------------------------
**
** EQUALITY OPERATORS
** --------------------------------------
** term token opcode
** -------------------------------------- */
"=", IS, AP_EQ,
"==", IS, AP_EQ,
"<>", BDOP, AP_NE,
"!=", BDOP, AP_NE,
/* -------------------------------------- */
(char *) 0
};
/*
** Tokens
** A structur initialized here to contain the YACC
** generated tokens for the indicated terminal symbols.
*/
struct special Tokens =
{
/* name = */ NAME,
/* sconst = */ SCONST,
/* bgncmnt = */ BGNCMNT,
/* endcmnt = */ ENDCMNT,
/* iconst = */ ICONST,
/* lconst = */ LCONST,
/* rconst = */ RCONST
};

View File

@ -0,0 +1,169 @@
/*
** TOKENS.Y -- operator and keyword tables
**
** Defines:
** Optab -- operator table
** Kwrdtab -- keyword tables
** Kwrdnum -- number of keywords (for binary search in getkey())
** Tokens -- so lexical routines can know about yacc tokens
*/
struct optab Kwrdtab[] =
{
"all", ALL, 0,
"and", LBOP, 0,
"any", AOP, 0,
"append", APPEND, 0,
"ascii", FOP, 0,
"at", AT, 0,
"atan", FOP, 0,
"auto", ALLOC, opAUTO,
"avg", AOP, 0,
"avgu", AOP, 0,
"by", BY, 0,
"char", TYPE, opSTRING,
"concat", FBOP, 0,
"copy", COPY, 0,
"cos", FOP, 0,
"count", AOP, 0,
"countu", AOP, 0,
"create", CREATE, 0,
"daba", DBS, 0,
"define", DEFINE, 0,
"delete", DELETE, 0,
"destroy", DESTROY, 0,
"double", TYPE, opDOUBLE,
"exit", EXIT, 0,
"extern", ALLOC, opEXTERN,
"float", TYPE,
# ifdef NO_F4
opDOUBLE,
# else
opFLT,
# endif
"float4", FOP,
# ifdef NO_F4
sizeof (double),
# else
sizeof (float),
# endif
"float8", FOP, sizeof (double),
"from", FROM, 0,
"gamma", FOP, 0,
"help", HELP, 0,
"in", IN, 0,
"index", INDEX, 0,
"ing_db", DBS, 0,
# ifdef BIT_32
"int", TYPE, opLONG,
# else
"int", TYPE, opINT,
# endif
# ifndef EBCDIC
"int1", FOP, sizeof (char),
"int2", FOP, sizeof (short),
"int4", FOP, sizeof (long),
# endif
"integrity", INTEGRITY, 0,
"into", INTO, 0,
# ifdef EBCDIC
"int1", FOP, sizeof (char),
"int2", FOP, sizeof (short),
"int4", FOP, sizeof (long),
# endif
"is", IS, 0,
"log", FOP, 0,
"long", TYPE, opLONG,
"max", AOP, 0,
"min", AOP, 0,
"mod", FBOP, 0,
"modify", MODIFY, 0,
"not", LUOP, 0,
"of", OF, 0,
"on", ON, 0,
"or", LBOP, 0,
"param", PARAM, 0,
"permit", PERMIT, 0,
"print", PRINT, 0,
"rand", FOP, 0,
"range", RANGE, 0,
"register", ALLOC, opREGISTER,
"replace", REPLACE, 0,
"retrieve", RETRIEVE, 0,
"save", SAVE, 0,
"short", TYPE, opINT,
"sin", FOP, 0,
"sqrt", FOP, 0,
"static", ALLOC, opSTATIC,
"struct", STRUCT, opSTRUCT,
"sum", AOP, 0,
"sumu", AOP, 0,
"to", TO, 0,
"unique", UNIQUE, 0,
"until", UNTIL, 0,
"view", VIEW, 0,
"where", WHERE, 0,
};
/* This decalaration must be here as getkey references it,
** and it must contain the number of elements in the
** Kwrdtab, which is only known here
*/
int Kwrdnum = sizeof Kwrdtab / sizeof Kwrdtab[0];
struct optab Optab[] =
{
/* PUNCTUATION */
",", COMMA, 0,
"(", LPAREN, 0,
".", PERIOD, 0,
")", RPAREN, 0,
"\"", QUOTE, 0,
"\/\*", BGNCMNT, 0,
"\*\/", ENDCMNT, 0,
"#", NONREF, 0,
":", COLON, 0,
/* C LANUAGE PUNCTUATION */
"{", LBRACE, 0,
"}", RBRACE, 0,
"[", LBRKT, 0,
"]", RBRKT, 0,
";", SEMICOL, 0,
"->", POINTER, 0,
/* UNARY ARITHMETIC OPERATORS */
"+", UOP, 0,
"-", UOP, 0,
/* BINARY ARITHMETIC OPERATORS */
"*", BOP, 0,
"/", BOP, 0,
"**", BOP, 0,
/* BOUNDS OPERATORS */
">", BDOP, 0,
">=", BDOP, 0,
"<", BDOP, 0,
"<=", BDOP, 0,
/* EQUALITY OPERATORS */
"!=", EOP, 0,
"=", IS, 0,
(char *) 0
};
struct special Tokens =
{
NAME,
SCONST,
I2CONST,
I4CONST,
F8CONST,
QUOTE,
BGNCMNT,
ENDCMNT,
C_CODE,
STRUCT_VAR,
};

View File

@ -0,0 +1,149 @@
/*
** SCANNER KEYWORD TABLES
**
** Keywords, tokens, and opcode tuples are included in this file
** The keyword table MUST be in sorted order.
** The operator table does not need to be sorted
*/
struct optab Keyword[] =
{
"abs", FOP, (short) opABS,
"all", ALL, 0,
"and", LBOP, AND,
"any", AGOP, (short) opANY,
"append", APPEND, GOVAL,
"ascii", FOP, (short) opASCII,
"at", AT, 0,
"atan", FOP, (short) opATAN,
"avg", AGOP, (short) opAVG,
"avgu", AGOP, (short) opAVGU,
"by", BY, (short) opEQ,
"concat", FBOP, (short) opCONCAT,
"copy", COPY, GOVAL,
"cos", FOP, (short) opCOS,
"count", AGOP, (short) opCNT,
"countu", AGOP, (short) opCNTU,
"create", CREATE, GOVAL,
"define", DEFINE, GOVAL,
"delete", DELETE, GOVAL,
"destroy", DESTROY, GOVAL,
# ifdef DISTRIB
"distribute", DISTRIBUTE, 0,
"distributed", DISTRD, 0,
# endif
"exp", FOP, (short) opEXP,
"float4", FOP,
# ifndef NO_F4
(short) opFLT4,
# else
opFLT8,
# endif
"float8", FOP, (short) opFLT8,
"from", FROM, 0,
"help", HELP, GOVAL,
"in", IN, 0,
"index", INDEX, GOVAL,
# ifndef EBCDIC
"int1", FOP, (short) opINT1,
"int2", FOP, (short) opINT2,
"int4", FOP, (short) opINT4,
# endif
"integrity", INTEGRITY, 0,
"into", INTO, 0,
# ifdef EBCDIC
"int1", FOP, opINT1,
"int2", FOP, opINT2,
"int4", FOP, opINT4,
# endif
"is", IS, (short) opEQ,
"log", FOP, (short) opLOG,
"max", AGOP, (short) opMAX,
"min", AGOP, (short) opMIN,
"mod", FBOP, (short) opMOD,
"modify", MODIFY, GOVAL,
"not", LUOP, (short) opNOT,
"of", OF, 0,
"on", ON, 0,
"or", LBOP, OR,
"permit", PERMIT, 0,
"print", PRINT, GOVAL,
"range", RANGE, GOVAL,
"replace", REPLACE, GOVAL,
"retrieve", RETRIEVE, GOVAL,
"save", SAVE, GOVAL,
"sin", FOP, (short) opSIN,
"sqrt", FOP, (short) opSQRT,
"sum", AGOP, (short) opSUM,
"sumu", AGOP, (short) opSUMU,
"to", TO, 0,
"unique", UNIQUE, 0,
"until", UNTIL, 0,
"view", VIEW, 0,
"where", WHERE, 0,
};
int Keyent = sizeof Keyword / sizeof Keyword[0];
struct optab Optab[] =
{
/* PUNCTUATION */
",", COMMA, 0,
"(", LPAREN, 0,
".", PERIOD, 0,
")", RPAREN, 0,
"\"", SCONST, 0,
"\/\*", BGNCMNT, 0,
"\*\/", ENDCMNT, 0,
":", COLON, 0,
/* UNARY ARITHMETIC OPERATORS */
"+", UAOP, (short) opADD,
"-", UAOP, (short) opSUB,
/* BINARY ARITHMETIC OPERATORS */
"*", BAOP, (short) opMUL,
"/", BAOP, (short) opDIV,
"**", BAOPH, (short) opPOW,
/* BOUNDS OPERATORS */
">", BDOP, (short) opGT,
">=", BDOP, (short) opGE,
"<", BDOP, (short) opLT,
"<=", BDOP, (short) opLE,
/* EQUALITY OPERATORS */
"!=", EOP, (short) opNE,
"=", IS, (short) opEQ,
(char *) 0
};
/* constant operators table for lookup */
struct constop Coptab[] =
{
"dba", (short) opDBA, CHAR, 2,
"usercode", (short) opUSERCODE, CHAR, 2,
(char *) 0, 0, 0, 0,
"date", (short) opDATE, '?', '?',
"time", (short) opDATE, '?', '?',
(char *) 0, 0, 0, 0
};
/*
** Tokens
** a structure initialized here to contain the
** yacc generated tokens for the indicated
** terminal symbols.
*/
struct special Tokens =
{
SCONST,
BGNCMNT,
ENDCMNT,
I2CONST,
I4CONST,
# ifndef NO_F4
F4CONST,
# endif
F8CONST,
NAME
};