typedef struct {
    short weight;
    char *expr;
} str_expr;

typedef struct {
    short weight;
    int value;
} num_expr;

typedef struct {
    char *name;
    unsigned short value;
} label_struct;

typedef struct {
    char *name;
    char *define;
} define_struct;

int f_mult(int a1, int a2);
int f_div(int a1, int a2);
int f_add(int a1, int a2);
int f_sub(int a1, int a2);
int f_or(int a1, int a2);
int f_and(int a1, int a2);
int f_xor(int a1, int a2);
int f_shl(int a1, int a2);
int f_shr(int a1, int a2);

int parse_string(char*);
int eval_string(char*);
int parse_expr(char*);
int eval_level(num_expr*);
int search_labels(char*);
char* next_char(char*);
void initialize_parser(void);
int insert_label(label_struct*);
//BOOL resolve_macro(char *, int *, BOOL, FILE*, BOOL);

extern int total_labels,total_defines;
extern const char operators[];
extern const char white_space[];
extern label_struct label_array[];
extern define_struct define_array[];


