www.pudn.com > Micro.rar > Semantic.h


#pragma once 
#include "common.h" 
 
 
class Semantic 
{ 
public: 
	Semantic(void); 
	~Semantic(void); 
}; 
 
typedef  char  cstr[ WORD_LEN ]; 
 
enum  OperateType { PLUS, MINUS, MUL, DIV }; 
 
typedef  struct  operate { 
	OperateType  operType; 
} op_rec; 
 
enum  ExprType  { IDEXPR,  LITERALEXPR,  TEMPEXPR, CALLEXPR }; 
 
typedef  struct  expr_strc { 
	enum  ExprType  kind; 
	union { 
		cstr name;  // for  IDEXPR,  TEMPEXPR,  CALLEXPR 
		int val;    // for  LITERALEXPR 
	}; 
} expr_rec; 
/* 
typedef  struct  func_strc { 
	cstr name; 
	int  param_count; 
} func_rec; */ 
 
enum  Level { GLOBAL, LOCAL }; 
 
//--------------------------------------------------------- 
char * get_temp(void); 
void   check_id(cstr ); 
void   check_intliteral(int ); 
void   check_func_def(cstr); 
 
void		start(void); 
void		finish(void); 
void		assign(expr_rec target, expr_rec source); 
 
op_rec		process_op(void); 
expr_rec	process_id(void); 
expr_rec	process_literal(void); 
void		gen_func_name(expr_rec & fdef); // new added 
void		process_func_call(void); // new added 
void        process_param(); // new added 
void		process_argu(); // new added 
 
expr_rec	gen_infix(expr_rec & e1, op_rec & op, expr_rec & e2); 
 
void		read_id(expr_rec & in_var); 
void		write_expr(expr_rec & out_expr); 
 
 
void		generate(char * op, char * A, char * B, char * C); 
 
void		semantic_error(char *);