开始写代码 STEP_2

来源:互联网 发布:成都市中考网络平台 编辑:程序博客网 时间:2024/04/24 01:57
#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;
}

 

 

原创粉丝点击