关闭

开始写代码 STEP_2

538人阅读 评论(0) 收藏 举报
#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;
}

 

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:585273次
    • 积分:8970
    • 等级:
    • 排名:第2077名
    • 原创:287篇
    • 转载:149篇
    • 译文:8篇
    • 评论:33条
    最新评论