79 lines
1.8 KiB
C
79 lines
1.8 KiB
C
/*
|
|
* This file is part of the UCB release of Plan 9. It is subject to the license
|
|
* terms in the LICENSE file found in the top-level directory of this
|
|
* distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
|
|
* part of the UCB release of Plan 9, including this file, may be copied,
|
|
* modified, propagated, or distributed except according to the terms contained
|
|
* in the LICENSE file.
|
|
*/
|
|
|
|
#include <u.h>
|
|
#include <lib9.h>
|
|
#include "hoc.h"
|
|
#include "y.tab.h"
|
|
|
|
static struct { /* Keywords */
|
|
char *name;
|
|
int kval;
|
|
} keywords[] = {
|
|
"proc", PROC,
|
|
"func", FUNC,
|
|
"return", RETURN,
|
|
"if", IF,
|
|
"else", ELSE,
|
|
"while", WHILE,
|
|
"for", FOR,
|
|
"print", PRINT,
|
|
"read", READ,
|
|
0, 0,
|
|
};
|
|
|
|
static struct { /* Constants */
|
|
char *name;
|
|
double cval;
|
|
} consts[] = {
|
|
"PI", 3.14159265358979323846,
|
|
"E", 2.71828182845904523536,
|
|
"GAMMA", 0.57721566490153286060, /* Euler */
|
|
"DEG", 57.29577951308232087680, /* deg/radian */
|
|
"PHI", 1.61803398874989484820, /* golden ratio */
|
|
0, 0
|
|
};
|
|
|
|
static struct { /* Built-ins */
|
|
char *name;
|
|
double (*func)(double);
|
|
} builtins[] = {
|
|
"sin", sin,
|
|
"cos", cos,
|
|
"tan", tan,
|
|
"atan", atan,
|
|
"asin", Asin, /* checks range */
|
|
"acos", Acos, /* checks range */
|
|
"sinh", Sinh, /* checks range */
|
|
"cosh", Cosh, /* checks range */
|
|
"tanh", tanh,
|
|
"log", Log, /* checks range */
|
|
"log10", Log10, /* checks range */
|
|
"exp", Exp, /* checks range */
|
|
"sqrt", Sqrt, /* checks range */
|
|
"int", integer,
|
|
"abs", fabs,
|
|
0, 0
|
|
};
|
|
|
|
void
|
|
init(void) /* install constants and built-ins in table */
|
|
{
|
|
int i;
|
|
Symbol *s;
|
|
for (i = 0; keywords[i].name; i++)
|
|
install(keywords[i].name, keywords[i].kval, 0.0);
|
|
for (i = 0; consts[i].name; i++)
|
|
install(consts[i].name, VAR, consts[i].cval);
|
|
for (i = 0; builtins[i].name; i++) {
|
|
s = install(builtins[i].name, BLTIN, 0.0);
|
|
s->u.ptr = builtins[i].func;
|
|
}
|
|
}
|