⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 proto.h

📁 一个c语言写做的编译器的源码
💻 H
字号:
/* PROTO.H:    Function prototypes for the various files that
*             comprise the compiler.
*/

#include "label.h"
#include "switch.h"
#include "symtab.h"
#include "value.h"

/* ======================= decl.c ======================== */

extern	link *new_class_spec(int first_char_of_lexeme);
extern	void set_class_bit(int first_char_of_lexeme,link *p);
extern	link *new_type_spec(char *lexeme);
extern	void add_spec_to_decl(link *p_spec,symbol *decl_chain);
extern	void add_symbols_to_table(symbol *sym);
extern	void figure_osclass(symbol *sym);
extern	void generate_defs_and_free_args(symbol *sym);
extern	symbol *remove_duplicates(symbol *sym);
extern	void print_bss_dcl(symbol *sym);
extern	void var_dcl(void (*ofunct)(char *,...),int c_code_sclass,symbol *sym,char *terminator);
extern	int illegal_struct_def(structdef *cur_struct,symbol *fields);
extern	int figure_struct_offsets(symbol *p,int is_struct);
extern	int get_alignment(link *p);
extern	void do_enum(symbol *sym,int val);
extern	int conv_sym_to_int_const(symbol *sym,int val);
extern	void fix_types_and_discard_syms(symbol *sym);
extern	int figure_param_offsets(symbol *sym);
extern	void print_offset_comment(symbol *sym,char *label);

/* ======================= gen.c ======================== */

extern	void gen_comment(char *format,...);
extern	void enable_trace(void);
extern	void disable_trace(void);
extern	void gen(char *op,...);

/* ======================= local.c ======================== */

extern	void loc_reset(void);
extern	int loc_var_space(void);
extern	void figure_local_offsets(symbol *sym,char *funct_name);
extern	void loc_auto_create(symbol *sym);
extern	void create_static_locals(symbol *sym,char *funct_name);
extern	void loc_static_create(symbol *sym,char *funct_name);
extern	void remove_symbols_from_table(symbol *sym);

/* ======================= main.c ======================== */

extern	void main(int argc,char **argv );
extern	void yyhook_a(void);
extern	void yyhook_b(void);

/* ======================= op.c ======================== */

extern	value *do_name(char *yytext,symbol *sym);
extern	symbol *make_implicit_declaration(char *name,symbol **undeclp );
extern	void purge_undecl(void);
extern	value *do_unop(int op,value *val);
extern	void do_unary_const(int op,value *val);
extern	int tf_label(void);
extern	value *gen_false_true(int labelnum,value *val);
extern	value *incop(int is_preincrement,int op,value *val);
extern	value *addr_of(value *val);
extern	value *indirect(value *offset,value *ptr);
extern	value *do_struct(value *val,int op,char *field_name);
extern	value *call(value *val,int nargs);
extern	char *ret_reg(link *p);
extern	value *assignment(int op,value *dst,value *src);
extern	void or(value *val,int label);
extern	value *gen_rvalue(value *val);
extern	void and(value *val,int label);
extern	value *relop(value *v1,int op,value *v2);
extern	value *binary_op(value *v1,int op,value *v2);
extern	value *plus_minus(value *v1,int op,value *v2);
extern	int rlabel(int incr);

/* ======================= symtab.c ======================== */

extern	symbol *new_symbol(char *name,int scope);
extern	void discard_symbol(symbol *sym);
extern	void discard_symbol_chain(symbol *sym);
extern	link *new_link(void);
extern	void discard_link_chain(link *p);
extern	void discard_link(link *p);
extern	structdef *new_structdef(char *tag);
extern	void add_declarator(symbol *sym,int type);
extern	void spec_cpy(link *dst,link *src);
extern	link *clone_type(link *tchain,link **endp );
extern	int the_same_type(link *p1,link *p2,int relax);
extern	int get_sizeof(link *p);
extern	symbol *reverse_links(symbol *sym);
extern	char *sclass_str(int class);
extern	char *oclass_str(int class);
extern	char *noun_str(int noun);
extern	char *attr_str(specifier *spec_p);
extern	char *type_str(link *link_p);
extern	char *tconst_str(link *type);
extern	char *sym_chain_str(symbol *chain);
extern	void print_syms(char *filename);

/* ======================= switch.c ======================== */

extern	stab *new_stab(value *val,int label);
extern	void add_case(stab *p,int on_this,int go_here);
extern	void add_default_case(stab *p,int go_here);
extern	void gen_stab_and_free_table(stab *p);

/* ======================= temp.c ======================== */

extern	int tmp_alloc(int size);
extern	void tmp_free(int offset);
extern	void tmp_reset(void);
extern	void tmp_freeall(void);
extern	int tmp_var_space(void);

/* ======================= value.c ======================== */

extern	value *new_value(void);
extern	void discard_value(value *p);
extern	char *shift_name(value *val,int left);
extern	char *rvalue(value *val);
extern	char *rvalue_name(value *val);
extern	value *tmp_create(link *type,int add_pointer);
extern	char *get_prefix(link *type);
extern	value *tmp_gen(link *tmp_type,value *src);
extern	char *convert_type(link *targ_type,value *src);
extern	int get_size(link *type);
extern	char *get_suffix(link *type);
extern	void release_value(value *val);
extern	value *make_icon(char *yytext,int numeric_val);
extern	value *make_int(void);
extern	value *make_scon(void);

/* ======================= c.y ======================== */

extern	int stk_err(int o);
extern	int sym_cmp(symbol *s1,symbol *s2);
extern	int struct_cmp(structdef *s1,structdef *s2);
extern	unsigned int sym_hash(symbol *s1);
extern	unsigned int struct_hash(structdef *s1);
extern	void yy_init_occs(void *val);
extern	char *yypstk(void *val,char *name);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -