|
|
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.