mirror of
https://github.com/9fans/plan9port.git
synced 2025-01-15 11:20:03 +00:00
70 lines
1.4 KiB
C
70 lines
1.4 KiB
C
|
#include <u.h>
|
||
|
#include <libc.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;
|
||
|
}
|
||
|
}
|