亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? symtable.c

?? vdhl and matlab, i think it good for you
?? C
字號:
#include <assert.h>#include <string.h>#include <stdio.h>#include "stdtypes.h"#include "blockpool.h"#include "pools.h"#include "str.h"#include "list.h"#include "fifo_list.h"#include "hash_serv.h"#include "sparse.h"#include "strtable.h"#include "sym.h"#include "type.h"#include "const.h"#include "symtable.h"#include "typetable.h"#include "dsym.h"/**   Search for a symbol in the hash chain list, using its STRING field   as a key.   The strings should have been entered in the string table.   As a result, an address compare can be used, since all strings   are unique in the string table.   Note that there must be a symbol table for each unique scope. */sym *symtable::chain_elem::search_list( STRING item ){    LIST<sym *>::handle h;    sym *list_sym, *sym;        sym = NULL;    for (h = list.first(); h != NULL; h = list.next(h)) {	list_sym = list.get_item( h );	if ( list_sym->get_name().GetText() == item.GetText() ) {	    sym = list_sym;	    break;	}  // if    } // for        return sym;} // search_list/**   Allocate a new symbol.  The STRING should have already   been entered in the string table.  Note that as   different derived symbol types are added to dsym.h this   function must be changed as well. */sym *symtable::new_sym( STRING str, uint kind ){    sym *pNewSym;    assert( alloc_pool != NULL );    switch ( kind ) {    // IDENT: has scope    case sy_ident:	pNewSym = new( alloc_pool ) sym_ident( str );	pNewSym->set_scope( get_owner() );	break;    // TYPE : no scope    case sy_type:	pNewSym = new( alloc_pool ) sym_type( str );	break;    // CONST: no scope    case sy_const:	pNewSym = new( alloc_pool ) sym_const( str );	break;    // SUBPROG: local symbol table    case sy_subprog:	pNewSym = new( alloc_pool ) sym_subprog( str );	// the subprogram is in the scope of the owner of this symbol table	pNewSym->set_scope( get_owner() );	// A function or procedure will allocate memory from	// from the same pool as its parent scope (which will be	// either a component or the global scope, in the case of	// a function in a package).	//	pNewSym->get_symtab()->set_pool( alloc_pool );	// Set the allocation pool for the type table	pNewSym->get_typtab()->set_pool( alloc_pool );		// The symbol table is owned by the subprogram	pNewSym->get_symtab()->set_owner( pNewSym );	break;    // COMPONENT: local memory pool and local symbol table    case sy_component:	pNewSym = new( alloc_pool ) sym_component( str );	// symbols in the component scope are owned by the component	pNewSym->get_symtab()->set_owner( pNewSym  );	break;    // PROCESS: local symbol table    case sy_process:	pNewSym = new( alloc_pool ) sym_process( str );	// the process is in the scope of its component	pNewSym->set_scope( get_owner() );	// set the memory pool to the pool of the parent	pNewSym->get_symtab()->set_pool( alloc_pool );	// Set the allocation pool for the type table	pNewSym->get_typtab()->set_pool( alloc_pool );		// The symbol table is owned by the process	pNewSym->get_symtab()->set_owner( pNewSym );	break;    case sy_package:   // its not currently clear what to do about packages    case sy_block_label:    case bad_symbol:    default:	// bad symbol kind	assert( FALSE );	break;    } // switch    assert( pNewSym != NULL );    return pNewSym;} // new_sym/**   Search for a symbol in the symbol table whose   name is in the STRING object name. */sym *symtable::find_sym( STRING name ){    STRING str;    sym *retsym;        retsym = NULL;    if (name.GetText() != NULL) {	// If the name is not entered into the string table then	// its not in the symbol table.  Of course the name could	// be in the string table and not in the symbol table, since	// the string table is global and symbol could be out of scope.	str = strtab.find_string( name, FALSE );	if (str.GetText() != NULL) {	    unsigned int ix, val;	    val = hash_value( str.GetText() );	    // table size should always be a power of 2, so	    // table_size - 1 is likely to be a prime.	    ix = val % (table_size - 1);	    if (hash->probe( ix )) { 		retsym =  (*hash)[ ix ].search_list( str );	    }   	}    }    return retsym;} // find_sym/**   Enter a symbol in the symbol table.  If "name" is not entered   in the string table, enter it as well. */sym *symtable::enter_sym( STRING name, uint kind ){    unsigned int ix, val;    sym *retsym;    STRING str;    retsym = NULL;    if (kind == sy_process) {	// Processes are special cases.  They are allocated by the	// symbol table class, since they are derived from the	// symbol type.  But they are not entered into the symbol	// table, since in VHDL a process name can't be referenced.	// Allocation of processes by the symbol table allows uniform	// allocation of all symbol derived objects.	retsym = new_sym( name, kind);    }    else {	assert( name.GetText() != NULL );	val = hash_value( name.GetText() );	str = strtab.find_string( name, TRUE );  // insert into table if its not there.	// table size should always be a power of 2, so	// table_size - 1 is likely to be a prime.	ix = val % (table_size - 1);	if (! hash->probe( ix ) ) {	    hash->insert( chain_elem(), ix );	    	    retsym = new_sym( str, kind );	    (*hash)[ix].list.add( retsym );	}	else {	    retsym = (*hash)[ix].search_list( str );	    if ( retsym == NULL) {		retsym = new_sym( str, kind );		(*hash)[ix].list.add( retsym );	    }	}    }    return retsym;} // enter_sym/**   Traverse the symbol table and find any symbol that has scope (e.g.,   its own symbol table).  Recursively call dealloc_sub_tables for   each of these symbols and then call dealloc to recover sparse array   and list memory. */void symtable::dealloc_sub_tables(void){    uint i;    for (i = 0; i < table_size; i++) {	if (hash->probe( i )) {	    LIST<sym *>::handle h;	    sym * pListSym;	    	    for (h = (*hash)[i].list.first(); h != NULL; h = (*hash)[i].list.next(h)) {		pListSym = (*hash)[i].list.get_item( h );		if (pListSym->has_scope()) {		    pListSym->get_symtab()->dealloc_sub_tables();		    pListSym->dealloc();		}	    } // for	} // if    } // for} // dealloc_sub_tables/**   Print the contents of the string table. */void symtable::pr(FILE *fp){    uint i;    for (i = 0; i < table_size; i++) {	if (hash->probe( i )) {	    LIST<sym *>::handle h;	    sym * pListSym;	    	    for (h = (*hash)[i].list.first(); h != NULL; h = (*hash)[i].list.next(h)) {		// fprintf(fp, "hash_label::pr: i = %d, ", i );		pListSym = (*hash)[i].list.get_item( h );		pListSym->get_name().pr(fp);		fprintf(fp, "\n");	    } // for	} // if    } // for} // pr/**   get_str is used to iterate through the string table.   See symtable.h. */sym *symtable::get_sym(void){    sym * pHashSym;    pHashSym = NULL;    while (list_handle == NULL && hash_slot < table_size) {	if (hash->probe( hash_slot )) {	    list_handle = (*hash)[hash_slot].list.first();	}	if (list_handle == NULL) {	    hash_slot++;	}    } // while    if (list_handle != NULL && hash_slot < table_size) {	pHashSym = (*hash)[hash_slot].list.get_item( list_handle );	list_handle = (*hash)[hash_slot].list.next(list_handle);	// if we've hit the end of the list, increment the	// slot so we're not stuck in the same place	if (list_handle == NULL)	    hash_slot++;	    }    return pHashSym;} // get_str

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美一区二区久久婷婷| 捆绑调教一区二区三区| 亚洲一级不卡视频| 日本中文字幕不卡| 国产麻豆9l精品三级站| 一本到不卡精品视频在线观看| 欧美日韩精品一区视频| 久久精品一二三| 亚洲午夜精品久久久久久久久| 狠狠色狠狠色综合系列| 91免费精品国自产拍在线不卡| 91精品国产色综合久久不卡电影| 中文字幕av一区二区三区高| 图片区小说区国产精品视频| 盗摄精品av一区二区三区| 欧美影院午夜播放| 国产网红主播福利一区二区| 午夜电影久久久| 99精品久久99久久久久| 日韩午夜精品视频| 亚洲欧美一区二区三区孕妇| 美洲天堂一区二卡三卡四卡视频 | 9191久久久久久久久久久| www亚洲一区| 亚洲国产cao| 成人动漫视频在线| 日韩三级视频在线观看| 亚洲人妖av一区二区| 久88久久88久久久| 欧美三区在线视频| 中文字幕亚洲成人| 狠狠色丁香久久婷婷综| 欧美日韩国产天堂| 成人免费在线播放视频| 久久99久久久久| 欧美色综合网站| 国产精品青草久久| 国内精品伊人久久久久影院对白| 欧美老女人在线| 亚洲你懂的在线视频| 成人少妇影院yyyy| 精品国产成人在线影院| 午夜国产不卡在线观看视频| 日本伦理一区二区| 国产精品久久久久一区二区三区 | 国产欧美日韩在线视频| 日韩电影网1区2区| 欧美三级视频在线播放| 亚洲视频一二三区| 成人免费高清在线观看| 久久精品夜色噜噜亚洲aⅴ| 美女一区二区视频| 欧美日韩国产中文| 亚洲福利视频导航| 欧美性猛交xxxx黑人交| 亚洲老司机在线| 色综合久久久久网| 国产精品久久久久婷婷二区次| 国产精品一二三区在线| 26uuuu精品一区二区| 韩国中文字幕2020精品| 欧美成人三级电影在线| 久久不见久久见免费视频7| 欧美成人综合网站| 久久激情五月激情| 欧美一级片在线| 久久国产视频网| 精品久久人人做人人爱| 麻豆精品视频在线观看免费| 日韩亚洲欧美一区| 热久久一区二区| 日韩欧美一级二级三级久久久| 日本视频免费一区| 日韩欧美你懂的| 精品午夜一区二区三区在线观看| 日韩你懂的在线播放| 国产综合久久久久影院| 久久久久久久久伊人| 国产不卡在线视频| 国产精品福利电影一区二区三区四区| 成人av午夜电影| 玉足女爽爽91| 欧洲人成人精品| 天堂va蜜桃一区二区三区| 在线播放91灌醉迷j高跟美女 | 久久精品日产第一区二区三区高清版| 国产福利视频一区二区三区| 国产精品私人影院| 99re66热这里只有精品3直播 | 91精品国产高清一区二区三区| 蜜臂av日日欢夜夜爽一区| 精品sm捆绑视频| 成人福利电影精品一区二区在线观看| 亚洲欧洲日本在线| 欧美亚州韩日在线看免费版国语版| 亚洲h在线观看| 日韩午夜激情免费电影| 国产东北露脸精品视频| 亚洲丝袜制服诱惑| 欧美喷水一区二区| 久草这里只有精品视频| 国产精品国产精品国产专区不片 | 午夜精品成人在线视频| 日韩欧美国产午夜精品| 国产精品一二三四| 一区二区三区在线视频免费| 欧美一区三区四区| 国产福利一区二区三区视频| 玉足女爽爽91| 久久亚洲捆绑美女| 91丝袜美女网| 免费欧美在线视频| 国产色产综合色产在线视频| 欧美专区日韩专区| 久久国内精品自在自线400部| 中文字幕亚洲电影| 欧美精品在线一区二区三区| 国产1区2区3区精品美女| 亚洲精品成人a在线观看| 欧美videossexotv100| 97超碰欧美中文字幕| 久久精品99国产精品日本| 自拍偷拍欧美激情| 日韩欧美一级在线播放| 色一区在线观看| 狠狠久久亚洲欧美| 亚洲国产综合色| 欧美韩日一区二区三区| 91麻豆精品国产综合久久久久久| 丁香婷婷综合网| 免费精品99久久国产综合精品| 国产精品久久久久久久久免费樱桃| 欧美挠脚心视频网站| 成人黄色av网站在线| 蜜桃久久久久久久| 亚洲综合av网| 中文字幕欧美日韩一区| 日韩欧美亚洲国产精品字幕久久久 | 欧美日韩精品欧美日韩精品一| 国产精品一二三四五| 日韩精品一二区| 日韩伦理电影网| 久久久精品免费观看| 欧美日韩国产a| 日本精品裸体写真集在线观看 | 国产视频一区二区在线| 91精选在线观看| 91久久精品网| av电影天堂一区二区在线 | 国产女人18毛片水真多成人如厕| 538prom精品视频线放| 91丝袜美女网| 不卡电影免费在线播放一区| 精品在线免费观看| 视频一区视频二区在线观看| 亚洲精品乱码久久久久久久久| 中文字幕乱码日本亚洲一区二区 | 国产福利一区二区三区视频| 麻豆freexxxx性91精品| 亚洲高清免费观看| 亚洲人成网站在线| 国产精品免费视频一区| 国产欧美日韩精品在线| 亚洲精品在线电影| 欧美一区二区三区在线视频| 欧美日韩久久久久久| 91福利国产成人精品照片| 99国产欧美另类久久久精品| 不卡一二三区首页| 成人午夜碰碰视频| 国产福利电影一区二区三区| 国产寡妇亲子伦一区二区| 国产精品影视在线观看| 精品一二三四在线| 久久超碰97人人做人人爱| 久久精品国产一区二区三 | 久久久久久久久久久久久女国产乱 | 一区二区三国产精华液| 亚洲精品成人悠悠色影视| 亚洲女同女同女同女同女同69| 亚洲三级电影网站| 亚洲欧美日韩国产手机在线| 亚洲精品国产无天堂网2021 | 欧美日韩精品一区二区三区四区 | 久久99久久精品欧美| 精品一区二区三区免费毛片爱 | 欧美高清在线一区二区| 欧美激情一区在线观看| 中文久久乱码一区二区| 国产精品夫妻自拍| 亚洲精品视频观看| 亚洲成a人v欧美综合天堂| 亚洲午夜日本在线观看| 日日夜夜免费精品| 免费观看91视频大全| 韩国成人在线视频| 国产成人在线观看免费网站| 高清shemale亚洲人妖| 99麻豆久久久国产精品免费优播| 色哟哟一区二区在线观看|