78 lines · 1.8 KB · C
RawDownload
/*  * 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 <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}; voidinit(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;	}}