开始写代码 STEP_2

#include  " PrimaryExpression.h "

static   const  CPrimaryExpression_VMT vmt  =   { CPrimaryExpression_Generate } ;

void  CPrimaryExpression_Initialize(CPrimaryExpression *   this )
{
    CExpression_Initialize((CExpression
*)this);
    ((CExpression
*)this)->vmt = (const CExpression_VMT*)&vmt;
}

void  CPrimaryExpression_Generate(CPrimaryExpression *   this , FILE *  output)
{
    
}
#ifndef _STREXPRESSION_H
#define  _STREXPRESSION_H

#include 
" PrimaryExpression.h "

typedef 
struct  StrExpression_t CStrExpression;

typedef 
struct  StrExpression_VMT {
  
void (*generate)(CStrExpression*, FILE*);
}
CStrExpression_VMT;

struct  StrExpression_t {
  CPrimaryExpression super;
  
char *image;
}
;

extern   void  CStrExpression_Initialize(CStrExpression * char * );

extern   void  CStrExpression_Generate(CStrExpression * , FILE * );
#endif
 

#ifndef _PRIMARY_EXPRESSION_H
#define  _PRIMARY_EXPRESSION_H

#include 
" Expression.h "

typedef 
struct  PrimaryExpression_t CPrimaryExpression;

typedef 
struct {
  
void (*generate)(CPrimaryExpression*, FILE*);
}
CPrimaryExpression_VMT;

struct  PrimaryExpression_t {
  CExpression super;
}
;

extern   void  CPrimaryExpression_Initialize(CPrimaryExpression * );
extern   void  CPrimaryExpression_Generate(CPrimaryExpression * , FILE * );
#endif

 

#include  " Expression.h "
#include 
< stdlib.h >

#define  SYMTAB_MAX   256

typedef 
struct  Symtab_t Symtab;

struct  Symtab_t {
  
char* name[SYMTAB_MAX];
  CExpression
* value[SYMTAB_MAX];
  
int count;
}
;
extern  Symtab  * create_symtab( void );

extern  CExpression *  search(Symtab * char * );

extern   int  regist(Symtab * char * , CExpression * );

 

#include  " symtab.h "
#include 
" memory.h "

Symtab
*  create_symtab()
{
    Symtab 
*obj = (Symtab*)get_memory(sizeof(Symtab));
    obj
->count = 0;
    
return obj;
}


CExpression
*  search(Symtab *   this char *  name)
{
    
int i;
    
    
for(i=0; i<this->count; i++){
        
if (!strcmp(this->name[i], name)){
            
return this->value[i];
        }

    }

    
return 0;
}


int  regist(Symtab *   this char *  name, CExpression *  value)
{
    
if(search(this, name)){
        
return 0;
    }

    
else{
        
if (this->count < SYMTAB_MAX){
            
this->name[this->count] = name;
            
this->value[this->count] = value;
            
this->count++;
            
return 1;
        }

        
else{
            fprintf(stderr,
"Symtab is Overflow!!! ");
            exit(
-1);
        }

    }

    
return 0;
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进击的横打

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值