下面是一个简单的小型加法栈式计算机
#include <stdio.h>
#include <stdlib.h>
///
// Data structures for the Sum language.
enum Exp_Kind_t {EXP_INT, EXP_SUM};
struct Exp_t
{
enum Exp_Kind_t kind;
};
struct Exp_Int
{
enum Exp_Kind_t kind;
int i;
};
struct Exp_Sum
{
enum Exp_Kind_t kind;
struct Exp_t *left;
struct Exp_t *right;
};
// "constructors"
struct Exp_t *Exp_Int_new (int i)
{
struct Exp_Int *p = (Exp_Int *)malloc (sizeof(Exp_Int));
p->kind = EXP_INT;
p->i = i;
return (struct Exp_t *)p;
}
struct Exp_t *Exp_Sum_new (struct Exp_t *left, struct Exp_t *right)
{
struct Exp_Sum *p = (Exp_Sum *) malloc (sizeof(Exp_Sum));
p->kind = EXP_SUM;
p->left = left;
p->right = right;
return (struct Exp_t *)p;
}
// "printer"
void Exp_print (struct Exp_t *exp)
{
switch (exp->kind){
case EXP_INT:{
struct Exp_Int *p = (struct Exp_Int *)ex