cvm.c
来自「压缩包里面的都是精致的基本C语言小程序」· C语言 代码 · 共 88 行
C
88 行
#include <stdio.h>#include "../lib/error.h"#include "../lib/hash.h"#include "../lib/nat.h"#include "../lib/mystdlib.h"#include "../lib/linkedList.h"#include "store.h"#include "cvm.h"nat cvmExp (store st, exp e){ switch (e->kind) { case ADD : { nat n1 = cvmExp (st, (e->u).binop.e1); nat n2 = cvmExp (st, (e->u).binop.e2); nat n = natAdd (n1, n2); return n; } case SUB : { nat n1 = cvmExp (st, (e->u).binop.e1); nat n2 = cvmExp (st, (e->u).binop.e2); nat n = natSub (n1, n2); return n; } case TIMES : { nat n1 = cvmExp (st, (e->u).binop.e1); nat n2 = cvmExp (st, (e->u).binop.e2); nat n = natTimes (n1, n2); return n; } case ID : { nat n = storeLookup (st, (e->u).id); return n; } case NUM : { return (newNat ((e->u).i)); } default: return (newNat (0)); }}void cvmStm (store st, stm s){ switch (s->kind) { case ASSIGN: { nat n = cvmExp (st, (s->u).a.e); storeUpdate (st, (s->u).a.id, n); break; } case PRINT: { nat n = cvmExp (st, (s->u).print); natOutput (n); printf ("\n"); break; } default: { error ("no this case\n"); break; } }}void cvmProg (prog p){ printf ("\nCVM starts:\n"); linkedList l = linkedListGetFirst (p->stms); store st = newStore (); while (l) { cvmStm (st, l->data); l = l->next; } printf ("\nCVM halts\n"); return;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?