|
|
1.1 ! root 1: #include "hoc.h" ! 2: #include "y.tab.h" ! 3: #include <math.h> ! 4: ! 5: extern double Log(), Log10(), Gamma(), Sqrt(), Exp(), integer(); ! 6: ! 7: static struct { /* Keywords */ ! 8: char *name; ! 9: int kval; ! 10: } keywords[] = { ! 11: "proc", PROC, ! 12: "func", FUNC, ! 13: "return", RETURN, ! 14: "if", IF, ! 15: "else", ELSE, ! 16: "while", WHILE, ! 17: "for", FOR, ! 18: "print", PRINT, ! 19: "read", READ, ! 20: 0, 0, ! 21: }; ! 22: ! 23: static struct { /* Constants */ ! 24: char *name; ! 25: double cval; ! 26: } consts[] = { ! 27: "PI", 3.14159265358979323846, ! 28: "E", 2.71828182845904523536, ! 29: "GAMMA", 0.57721566490153286060, /* Euler */ ! 30: "DEG", 57.29577951308232087680, /* deg/radian */ ! 31: "PHI", 1.61803398874989484820, /* golden ratio */ ! 32: 0, 0 ! 33: }; ! 34: ! 35: static struct { /* Built-ins */ ! 36: char *name; ! 37: double (*func)(); ! 38: } builtins[] = { ! 39: "sin", sin, ! 40: "cos", cos, ! 41: "atan", atan, ! 42: "log", Log, /* checks range */ ! 43: "log10", Log10, /* checks range */ ! 44: "exp", Exp, /* checks range */ ! 45: "sqrt", Sqrt, /* checks range */ ! 46: "gamma", Gamma, /* checks range */ ! 47: "int", integer, ! 48: "abs", fabs, ! 49: 0, 0 ! 50: }; ! 51: ! 52: init() /* install constants and built-ins in table */ ! 53: { ! 54: int i; ! 55: Symbol *s; ! 56: for (i = 0; keywords[i].name; i++) ! 57: install(keywords[i].name, keywords[i].kval, 0.0); ! 58: for (i = 0; consts[i].name; i++) ! 59: install(consts[i].name, VAR, consts[i].cval); ! 60: for (i = 0; builtins[i].name; i++) { ! 61: s = install(builtins[i].name, BLTIN, 0.0); ! 62: s->u.ptr = builtins[i].func; ! 63: } ! 64: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.