开始写代码 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* thischar* 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* thischar* 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、付费专栏及课程。

余额充值