編譯原理程式設計實踐 四 一些輔助函式

2021-06-13 01:41:13 字數 1465 閱讀 1734

/* 目標**生成過程gen */

/* 引數:x:要生成的一行**的助記符 */

/* y, z:**的兩個運算元 */

/* 本過程用於把生成的目標**寫入目標**陣列,供後面的直譯器解釋執行 */

void gen(fct x,int y, int z)

code[cx].f = x ;

code[cx].l = y ;

code[cx].a = z ;

++cx; /* 移動cx指標指向下乙個空位 */

} /* gen */;

templatesetoperator +(const set& x, const set& y)

templateset& operator += (set& x, const set& y)

/* 測試當前單詞是否合法過程test */

/* 引數:s1:當語法分析進入或退出某一語法單元時當前單詞符合應屬於的集合 */

/* s2:在某一出錯狀態下,可恢復語法分析正常工作的補充單詞集合 */

/* n:出錯資訊編號,當當前符號不屬於合法的s1集合時發出的出錯資訊 */

void test(symset s1, const symset& s2, int n)

}/* test */;

/* 登陸符號表過程enter */

/* 引數:k:欲登陸到符號表的符號型別 */

void enter(object k, const int& lev, int& tx, int &dx)

table[tx].val = num; /* 如是合法的數值,就登陸到符號表 */

break;

} case variable: /* 如果是變數名 */

table[tx].level = lev ; /* 記下它所屬的層次號 */

table[tx].adr = dx ; /* 記下它在當前層中的偏移量 */

++dx ; /* 偏移量自增一,為下一次做好準備 */

break;

case procedure: /* 如果要登陸的是過程名 */

table[tx].level = lev; /* 記錄下這個過程所在層次 */

break;

}} /* enter */;

/* 登入符號過程沒有考慮到重複的定義的問題。如果出現重複定義,則以最後一次的定義為準。 */

/* 在符號表中查詢指定符號所在位置的函式position */

/* 引數:id:要找的符號 */

/* 返回值:要找的符號在符號表中的位置,如果找不到就返回0 */

int position (alfa id,const int& tx)

/* position */;

templatebool in(const t val, const set& s)

Python爬蟲實踐 四 一些不常用設定

設定 urllib2缺省會使用環境變數http proxy來設定 http proxy 假如乙個 它會檢測某一段時間某個ip 的訪問次數,如果訪問次數過多,它會禁止你的訪問。所以你可以設定一些 伺服器來幫助你做工作,每隔一段時間換乙個 以防被禁止。設定方法 import urllib2 enable...

tiny 的編譯原理實踐

首先將tm.c的執行得到tiny虛擬機器 globals.h main.c util.h util.c scan.h scan.c parse.h parse.c symtab.h symtab.c analyze.h analyze.c code.h code.c cgen.h cgen.c 拷貝...

物件導向的asp程式設計之四 一些常用的函式

function recordsetasarray rsado,includeheaderrow 把ado.recordset中的資料存放到乙個陣列裡 當includeheaderrow為真時產生字段標題行,當為假時不產生 if rsado.eof rsado.bof rsado.movefirst...