aboutsummaryrefslogtreecommitdiff
path: root/store/works/life/compile-principle-experiment/4/main.h
blob: 96bd9e7c20f1572f7ec7147ca464ce11fb0eab30 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#pragma once

typedef union SymbolValue {
  double val;
  double (*ptr)();
} SymbolValue;

typedef struct Symbol {
  char *name;
  int type;
  SymbolValue value;
  struct Symbol *next;
} Symbol;

Symbol *cru_symbol_lookup(const char *name);
Symbol *cru_symbol_install(const char *name, int type, SymbolValue value);

double Pow(double x, double y);

int yylex();
int yyparse();
void yyerror(const char *s);

extern int lineno;
void execerror(const char *s, const char *t);

typedef union Datum { /* interpreter stack type */
  double val;
  Symbol *sym;
} Datum;
extern Datum pop();
int mypop();

typedef int (*Inst)(); /* machine instruction */
#define STOP (Inst)0

extern Inst prog[];
extern int eval(), add(), sub(), mul(), mydiv(), negate(), power();
extern int assign(), bltin(), varpush(), constpush(), print();

extern Inst *code(Inst f);