aboutsummaryrefslogtreecommitdiff
path: root/src/include/pp.h
blob: d82907c75b6ec00369741dd7a072ec3157049fb7 (plain) (blame)
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
43
44
45
46
47
48
49
50
51
52
53
54
55
#ifndef PP_H
#define PP_H

#include <stdlib.h>
#include <string.h>

#include "util.h"
#include "syntax.h"

/* TODO */
typedef struct MACRO_STRUC {
   char* id;
   char* val;
} macro_t;

/* 
   preprocessor struct

   TODO: keep track of macros
*/
typedef struct PP_STRUC {
   /* original source */
   char* src;

   /* pre-processed source */
   char* psrc;

   /* what the preprocessor is looking at right now */
   enum PP_STATE {
      PP_STATE_REG,  /* regular */
      PP_STATE_STR,  /* string */
      PP_STATE_COM,  /* comment */
      PP_STATE_ESC,  /* escaped character in string */
      /* PP_STATE_MCO, */  /* macro */
   } state;
} pp_t;

/* creates a new preprocessor from some source code */
pp_t* pp_init(char*);

/* destroys the preprocessor **but not the pre-processed source** */
void pp_destroy(pp_t*);

/* copy over the current character from src to psrc */
void pp_cpy_char(pp_t*);

void pp_do_reg(pp_t*);
void pp_do_str(pp_t*);
void pp_do_com(pp_t*);

/* run the preprocessor */
void pp_run(pp_t*);

#endif