summaryrefslogtreecommitdiff
path: root/src/include/ast.h
blob: f7be3d5cd811cb1c7c4a1b277d71605d63859e06 (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
42
#ifndef AST_H
#define AST_H
#include <stdbool.h>

typedef struct AST_STRUCT {
  enum {
    /* complex types */
    AST_PAIR,
    AST_SYMBOL,
    /* self evaluating types */
    AST_STRING,
    AST_BOOL,
    AST_INT,
    AST_FLOAT,
    AST_FUNCTION,
  } type;

  /* For functions, the car will be a list of variables, and the cdr will be the
   * expression */
  struct AST_STRUCT *car;
  struct AST_STRUCT *cdr;

  char *string_value;
  int int_value;
  double float_value;
  bool bool_value;
} ast_t;

ast_t *init_ast_string(char *value);

ast_t *init_ast_int(int value);

ast_t *init_ast_float(double value);

ast_t *init_ast_pair(ast_t *car, ast_t *cdr);

ast_t *init_ast_bool(bool value);

ast_t *init_ast_symbol(char *value);

ast_t *init_ast_function(ast_t *car, ast_t *cdr);
#endif