示例#1
0
treegen_t* 
makeTreeGen (int N)
{
    treegen_t* tg = NEW(treegen_t);

    tg->N = N;
    tg->T = genCnt(N);
    tg->sp = mkStack(N+1);
    tg->tp = mkTree(N+1);
    srand(time(0));

    return tg;
}
示例#2
0
文件: vmCode.c 项目: tctsigemura/C--
// 構文木をトレースする
static void traceTree(int node) {
  if (node==SyNULL) return;                       // 何も無い
  int ty = syGetType(node);
  if (ty==SyIF) genIf(node);                      // if 文
  else if (ty==SyELS) genEls(node);               // if-else 文
  else if (ty==SyWHL) genWhl(node);               // while 文
  else if (ty==SyDO)  genDo(node);                // do-while 文
  else if (ty==SyBRK) genBrk(node);               // break 文
  else if (ty==SyCNT) genCnt(node);               // continue 文
  else if (ty==SyRET) genRet(node);               // retrun 文
  else if (ty==SyBLK || ty==SySEMI) {             // ブロック
    traceTree(syGetLVal(node));                   //   先に左側をコード生成
    traceTree(syGetRVal(node));                   //   次に右側をコード生成
  } else if (ty==SyVAR) {                         // ローカル変数宣言
    ;                                             //   特にやることがない
  } else {                                        // 式文
    struct Expr *c = newExpr();                   //   式の状態を管理するデータ
    genBoolExpr(node, c);                         //   式を処理する
    pop(c);                                       //   スタックにあれば捨てる
    free(c);                                      //   管理データを解放
  }
}