/* token.h */ /* contains the declarations for token structures, etc */ #define MAX_TOK_LEN 31 #define FN_BLK 256 /* Token Types */ #define NO_TOK 38 #define NAME_TOK 39 #define STRING_TOK 40 #define INTEGER_TOK 41 #define EOF_TOK 42 /* eof has been received */ #define VAR_DCL_TOK 43 /* int, string, object */ #define STATIC_TOK 44 /* static */ #define COMMA_TOK 0 /* , */ #define SEMI_TOK 45 /* ; */ #define LBRACK_TOK 46 /* { */ #define RBRACK_TOK 47 /* } */ #define LPAR_TOK 48 /* ( */ #define RPAR_TOK 49 /* ) */ #define IF_TOK 50 /* if */ #define ELSE_TOK 51 /* else */ #define WHILE_TOK 52 /* while */ #define FOR_TOK 53 /* for */ #define DO_TOK 54 /* do */ #define COLON_TOK 55 /* : */ #define LARRAY_TOK 56 /* [ */ #define RARRAY_TOK 57 /* ] */ #define SECOND_TOK 58 /* :: */ #define RETURN_TOK 59 /* return */ /* Data structure declarations */ typedef struct { unsigned char type; union { signed long integer; char *name; } token_data; } token_t; struct file_stack { FILE *file_ptr; struct file_stack *previous; }; typedef struct { unsigned int num; struct var_tab *varlist; } sym_tab_t; struct parm { char *name; char *exp; struct parm *next; }; struct define { char *name; char *definition; int has_paren; struct parm *params; struct define *next; }; typedef struct { FILE *curr_file; struct file_stack *previous; /* previously opened files */ token_t put_back_token; /* the put-back token */ int is_put_back; char *expanded; /* expanded #defines, etc */ unsigned int phys_line; /* physical line */ struct code *curr_code; /* code */ sym_tab_t *glob_sym; /* global symbol table */ struct define *defs; /* #defines */ int depth; } filptr; typedef struct { struct var *code; unsigned long num_code; unsigned long num_alloc; } fn_t; /* Function prototypes */ struct fns *find_func(struct fns *curr_fn, char *name); unsigned char find_syscall(char *name); struct var_tab *find_var(char *name, sym_tab_t *sym); void free_file_stack(filptr *file_info); void free_sym_t(sym_tab_t *sym); void free_define(filptr *file_info); unsigned int top_level_parse(filptr *file_info); unsigned int parse_block(filptr *file_info, fn_t *curr_fn, sym_tab_t *loc_sym); unsigned int parse_exp(filptr *file_info, fn_t *curr_fn, sym_tab_t *loc_sym, int prec, int last_was_arg); unsigned int parse_line(filptr *file_info, fn_t *curr_fn, sym_tab_t *loc_sym); unsigned int parse_arglist(filptr *file_info, fn_t *curr_fn, sym_tab_t *loc_sym); unsigned int parse_var(char *name,filptr *file_info, fn_t *curr_fn, sym_tab_t *loc_sym); unsigned int add_var(filptr *file_info, sym_tab_t *sym); void get_token(filptr *file_info, token_t *token); void unget_token(filptr *file_info, token_t *token); int preprocess(filptr *file_info); void expand_def(struct define *def, char *buf); void expand(struct define *def, filptr *file_info); void expand_exp(struct define *def, filptr *file_info); void set_c_err_msg(char *msg);