123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219 |
- #include "e.h"
- #include "y.tab.h"
- tbl *keytbl[TBLSIZE]; /* key words */
- tbl *restbl[TBLSIZE]; /* reserved words */
- tbl *deftbl[TBLSIZE]; /* user-defined names */
- struct keyword {
- char *key;
- int keyval;
- } keyword[] ={
- "sub", SUB,
- "sup", SUP,
- ".EN", DOTEN,
- ".EQ", DOTEQ,
- "from", FROM,
- "to", TO,
- "sum", SUM,
- "hat", HAT,
- "vec", VEC,
- "dyad", DYAD,
- "dot", DOT,
- "dotdot", DOTDOT,
- "bar", BAR,
- "lowbar", LOWBAR,
- "highbar", HIGHBAR,
- "tilde", TILDE,
- "utilde", UTILDE,
- "under", UNDER,
- "prod", PROD,
- "int", INT,
- "integral", INT,
- "union", UNION,
- "inter", INTER,
- "matrix", MATRIX,
- "col", COL,
- "lcol", LCOL,
- "ccol", CCOL,
- "rcol", RCOL,
- "pile", COL, /* synonyms ... */
- "lpile", LCOL,
- "cpile", CCOL,
- "rpile", RCOL,
- "over", OVER,
- "sqrt", SQRT,
- "above", ABOVE,
- "size", SIZE,
- "font", FONT,
- "fat", FAT,
- "roman", ROMAN,
- "italic", ITALIC,
- "bold", BOLD,
- "left", LEFT,
- "right", RIGHT,
- "delim", DELIM,
- "define", DEFINE,
- "tdefine", DEFINE,
- "ndefine", NDEFINE,
- "ifdef", IFDEF,
- "gsize", GSIZE,
- ".gsize", GSIZE,
- "gfont", GFONT,
- "include", INCLUDE,
- "copy", INCLUDE,
- "space", SPACE,
- "up", UP,
- "down", DOWN,
- "fwd", FWD,
- "back", BACK,
- "mark", MARK,
- "lineup", LINEUP,
- 0, 0
- };
- struct resword {
- char *res;
- char *resval;
- } resword[] ={
- ">=", "\\(>=",
- "<=", "\\(<=",
- "==", "\\(==",
- "!=", "\\(!=",
- "+-", "\\(+-",
- "->", "\\(->",
- "<-", "\\(<-",
- "inf", "\\(if",
- "infinity", "\\(if",
- "partial", "\\(pd",
- "half", "\\f1\\(12\\fP",
- "prime", "\\f1\\v'.5m'\\s+3\\(fm\\s-3\\v'-.5m'\\fP",
- "dollar", "\\f1$\\fP",
- "nothing", "",
- "times", "\\(mu",
- "del", "\\(gr",
- "grad", "\\(gr",
- "approx", "\\v'-.2m'\\z\\(ap\\v'.25m'\\(ap\\v'-.05m'",
- "cdot", "\\v'-.3m'.\\v'.3m'",
- "...", "\\v'-.25m'\\ .\\ .\\ .\\ \\v'.25m'",
- ",...,", "\\f1,\\fP\\ .\\ .\\ .\\ \\f1,\\fP\\|",
- "alpha", "α",
- "ALPHA", "Α",
- "beta", "β",
- "BETA", "Β",
- "gamma", "γ",
- "GAMMA", "Γ",
- "delta", "δ",
- "DELTA", "Δ",
- "epsilon", "ε",
- "EPSILON", "Ε",
- "omega", "ω",
- "OMEGA", "Ω",
- "lambda", "λ",
- "LAMBDA", "Λ",
- "mu", "μ",
- "MU", "Μ",
- "nu", "ν",
- "NU", "Ν",
- "theta", "θ",
- "THETA", "Θ",
- "phi", "φ",
- "PHI", "Φ",
- "pi", "π",
- "PI", "Π",
- "sigma", "σ",
- "SIGMA", "Σ",
- "xi", "ξ",
- "XI", "Ξ",
- "zeta", "ζ",
- "ZETA", "Ζ",
- "iota", "ι",
- "IOTA", "Ι",
- "eta", "η",
- "ETA", "Η",
- "kappa", "κ",
- "KAPPA", "Κ",
- "rho", "ρ",
- "RHO", "Ρ",
- "tau", "τ",
- "TAU", "Τ",
- "omicron", "ο",
- "OMICRON", "Ο",
- "upsilon", "υ",
- "UPSILON", "Υ",
- "psi", "ψ",
- "PSI", "Ψ",
- "chi", "χ",
- "CHI", "Χ",
- "and", "\\f1and\\fP",
- "for", "\\f1for\\fP",
- "if", "\\f1if\\fP",
- "Re", "\\f1Re\\fP",
- "Im", "\\f1Im\\fP",
- "sin", "\\f1sin\\fP",
- "cos", "\\f1cos\\fP",
- "tan", "\\f1tan\\fP",
- "arc", "\\f1arc\\fP",
- "sinh", "\\f1sinh\\fP",
- "coth", "\\f1coth\\fP",
- "tanh", "\\f1tanh\\fP",
- "cosh", "\\f1cosh\\fP",
- "lim", "\\f1lim\\fP",
- "log", "\\f1log\\fP",
- "ln", "\\f1ln\\fP",
- "max", "\\f1max\\fP",
- "min", "\\f1min\\fP",
- "exp", "\\f1exp\\fP",
- "det", "\\f1det\\fP",
- 0, 0
- };
- int hash(char *s)
- {
- register unsigned int h;
- for (h = 0; *s != '\0'; )
- h += *s++;
- h %= TBLSIZE;
- return h;
- }
- tbl *lookup(tbl **tblp, char *name) /* find name in tbl */
- {
- register tbl *p;
- for (p = tblp[hash(name)]; p != NULL; p = p->next)
- if (strcmp(name, p->name) == 0)
- return(p);
- return(NULL);
- }
- void install(tbl **tblp, char *name, char *cval, int ival) /* install name, vals in tblp */
- {
- register tbl *p;
- int h;
- if ((p = lookup(tblp, name)) == NULL) {
- p = (tbl *) malloc(sizeof(tbl));
- if (p == NULL)
- ERROR "out of space in install" FATAL;
- h = hash(name); /* bad visibility here */
- p->name = name;
- p->next = tblp[h];
- tblp[h] = p;
- }
- p->cval = cval;
- p->ival = ival;
- }
- void init_tbl(void) /* initialize tables */
- {
- int i;
- extern int init_tune(void);
- for (i = 0; keyword[i].key != NULL; i++)
- install(keytbl, keyword[i].key, (char *) 0, keyword[i].keyval);
- for (i = 0; resword[i].res != NULL; i++)
- install(restbl, resword[i].res, resword[i].resval, 0);
- init_tune(); /* tuning table done in tuning.c */
- }
|