Blame


1 c5b9ff9f 2003-12-04 devnull #include <u.h>
2 c5b9ff9f 2003-12-04 devnull #include <libc.h>
3 c5b9ff9f 2003-12-04 devnull #include "hoc.h"
4 c5b9ff9f 2003-12-04 devnull #include "y.tab.h"
5 c5b9ff9f 2003-12-04 devnull
6 c5b9ff9f 2003-12-04 devnull static struct { /* Keywords */
7 c5b9ff9f 2003-12-04 devnull char *name;
8 c5b9ff9f 2003-12-04 devnull int kval;
9 c5b9ff9f 2003-12-04 devnull } keywords[] = {
10 c5b9ff9f 2003-12-04 devnull "proc", PROC,
11 c5b9ff9f 2003-12-04 devnull "func", FUNC,
12 c5b9ff9f 2003-12-04 devnull "return", RETURN,
13 c5b9ff9f 2003-12-04 devnull "if", IF,
14 c5b9ff9f 2003-12-04 devnull "else", ELSE,
15 c5b9ff9f 2003-12-04 devnull "while", WHILE,
16 c5b9ff9f 2003-12-04 devnull "for", FOR,
17 c5b9ff9f 2003-12-04 devnull "print", PRINT,
18 c5b9ff9f 2003-12-04 devnull "read", READ,
19 cbeb0b26 2006-04-01 devnull 0, 0
20 c5b9ff9f 2003-12-04 devnull };
21 c5b9ff9f 2003-12-04 devnull
22 c5b9ff9f 2003-12-04 devnull static struct { /* Constants */
23 c5b9ff9f 2003-12-04 devnull char *name;
24 c5b9ff9f 2003-12-04 devnull double cval;
25 c5b9ff9f 2003-12-04 devnull } consts[] = {
26 c5b9ff9f 2003-12-04 devnull "PI", 3.14159265358979323846,
27 c5b9ff9f 2003-12-04 devnull "E", 2.71828182845904523536,
28 c5b9ff9f 2003-12-04 devnull "GAMMA", 0.57721566490153286060, /* Euler */
29 c5b9ff9f 2003-12-04 devnull "DEG", 57.29577951308232087680, /* deg/radian */
30 c5b9ff9f 2003-12-04 devnull "PHI", 1.61803398874989484820, /* golden ratio */
31 c5b9ff9f 2003-12-04 devnull 0, 0
32 c5b9ff9f 2003-12-04 devnull };
33 c5b9ff9f 2003-12-04 devnull
34 c5b9ff9f 2003-12-04 devnull static struct { /* Built-ins */
35 c5b9ff9f 2003-12-04 devnull char *name;
36 c5b9ff9f 2003-12-04 devnull double (*func)(double);
37 c5b9ff9f 2003-12-04 devnull } builtins[] = {
38 c5b9ff9f 2003-12-04 devnull "sin", sin,
39 c5b9ff9f 2003-12-04 devnull "cos", cos,
40 c5b9ff9f 2003-12-04 devnull "tan", tan,
41 c5b9ff9f 2003-12-04 devnull "atan", atan,
42 c5b9ff9f 2003-12-04 devnull "asin", Asin, /* checks range */
43 c5b9ff9f 2003-12-04 devnull "acos", Acos, /* checks range */
44 c5b9ff9f 2003-12-04 devnull "sinh", Sinh, /* checks range */
45 c5b9ff9f 2003-12-04 devnull "cosh", Cosh, /* checks range */
46 c5b9ff9f 2003-12-04 devnull "tanh", tanh,
47 c5b9ff9f 2003-12-04 devnull "log", Log, /* checks range */
48 c5b9ff9f 2003-12-04 devnull "log10", Log10, /* checks range */
49 c5b9ff9f 2003-12-04 devnull "exp", Exp, /* checks range */
50 c5b9ff9f 2003-12-04 devnull "sqrt", Sqrt, /* checks range */
51 c5b9ff9f 2003-12-04 devnull "int", integer,
52 c5b9ff9f 2003-12-04 devnull "abs", fabs,
53 c5b9ff9f 2003-12-04 devnull 0, 0
54 c5b9ff9f 2003-12-04 devnull };
55 c5b9ff9f 2003-12-04 devnull
56 c5b9ff9f 2003-12-04 devnull void
57 c5b9ff9f 2003-12-04 devnull init(void) /* install constants and built-ins in table */
58 c5b9ff9f 2003-12-04 devnull {
59 c5b9ff9f 2003-12-04 devnull int i;
60 c5b9ff9f 2003-12-04 devnull Symbol *s;
61 c5b9ff9f 2003-12-04 devnull for (i = 0; keywords[i].name; i++)
62 c5b9ff9f 2003-12-04 devnull install(keywords[i].name, keywords[i].kval, 0.0);
63 c5b9ff9f 2003-12-04 devnull for (i = 0; consts[i].name; i++)
64 c5b9ff9f 2003-12-04 devnull install(consts[i].name, VAR, consts[i].cval);
65 c5b9ff9f 2003-12-04 devnull for (i = 0; builtins[i].name; i++) {
66 c5b9ff9f 2003-12-04 devnull s = install(builtins[i].name, BLTIN, 0.0);
67 c5b9ff9f 2003-12-04 devnull s->u.ptr = builtins[i].func;
68 c5b9ff9f 2003-12-04 devnull }
69 c5b9ff9f 2003-12-04 devnull }