Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
typedef void (*Inst)(void);
2
#define	STOP	(Inst) 0
3
 
4
typedef struct Symbol	Symbol;
5
typedef union Datum 	Datum;
6
typedef struct Formal	Formal;
7
typedef struct Saveval	Saveval;
8
typedef struct Fndefn	Fndefn;
9
typedef union Symval	Symval;
10
 
11
union Symval { /* value of a symbol */
12
	double	val;		/* VAR */
13
	double	(*ptr)(double);	/* BLTIN */
14
	Fndefn	*defn;		/* FUNCTION, PROCEDURE */
15
	char	*str;		/* STRING */
16
};
17
 
18
struct Symbol {	/* symbol table entry */
19
	char	*name;
20
	long	type;
21
	Symval u;
22
	struct Symbol	*next;	/* to link to another */
23
};
24
Symbol	*install(char*, int, double), *lookup(char*);
25
 
26
union Datum {	/* interpreter stack type */
27
	double	val;
28
	Symbol	*sym;
29
};
30
 
31
struct Saveval {	/* saved value of variable */
32
	Symval	val;
33
	long		type;
34
	Saveval	*next;
35
};
36
 
37
struct Formal {	/* formal parameter */
38
	Symbol	*sym;
39
	Saveval	*save;
40
	Formal	*next;
41
};
42
 
43
struct Fndefn {	/* formal parameter */
44
	Inst	*code;
45
	Formal	*formals;
46
	int	nargs;
47
};
48
 
49
extern	Formal *formallist(Symbol*, Formal*);
50
extern	double Fgetd(int);
51
extern	int moreinput(void);
52
extern	void restore(Symbol*);
53
extern	void restoreall(void);
54
extern	void execerror(char*, char*);
55
extern	void define(Symbol*, Formal*), verify(Symbol*);
56
extern	Datum pop(void);
57
extern	void initcode(void), push(Datum), xpop(void), constpush(void);
58
extern	void varpush(void);
59
extern	void eval(void), add(void), sub(void), mul(void), div(void), mod(void);
60
extern	void negate(void), power(void);
61
extern	void addeq(void), subeq(void), muleq(void), diveq(void), modeq(void);
62
 
63
extern	Inst *progp, *progbase, prog[], *code(Inst);
64
extern	void assign(void), bltin(void), varread(void);
65
extern	void prexpr(void), prstr(void);
66
extern	void gt(void), lt(void), eq(void), ge(void), le(void), ne(void);
67
extern	void and(void), or(void), not(void);
68
extern	void ifcode(void), whilecode(void), forcode(void);
69
extern	void call(void), arg(void), argassign(void);
70
extern	void funcret(void), procret(void);
71
extern	void preinc(void), predec(void), postinc(void), postdec(void);
72
extern	void execute(Inst*);
73
extern	void printtop(void);
74
 
75
extern double	Log(double), Log10(double), Gamma(double), Sqrt(double), Exp(double);
76
extern double	Asin(double), Acos(double), Sinh(double), Cosh(double), integer(double);
77
extern double	Pow(double, double);
78
 
79
extern	void init(void);
80
extern	int yyparse(void);
81
extern	void execerror(char*, char*);
82
extern	void *emalloc(unsigned);