資源簡介
符號(hào)表設(shè)計(jì)與實(shí)現(xiàn) 編譯原理 湖南大學(xué)

代碼片段和文件信息
#include?
#include?
#include?
using?namespace?std;
const?int?MaxSize=1000000;
const?int?MaxP=999983;
const?int?SHIFT=2;
const?string?Td[8]={“常量““變量““數(shù)組““結(jié)構(gòu)體““文件““標(biāo)號(hào)““指針““函數(shù)“};
const?string?Ad[6]={“整型““實(shí)型““字符型““布爾型““枚舉型““void“};
class?Tag?{
public:
Tag(){}
Tag(string?name){
?????Name?=?name;
?????cout<<“\n請輸入標(biāo)識(shí)符的種類:“< ?????cout<<“1.常量\t2.變量\t3.數(shù)組\t4.結(jié)構(gòu)體\n5.文件\t6.標(biāo)號(hào)\t7.指針\t8.函數(shù)“< ?????cin>>Type;
?????cout<<“\n請輸入標(biāo)識(shí)符的屬性:“< ?????cout<<“1.整型\t2.實(shí)型\t3.字符型\t4.布爾型\n5.枚舉型\t6.void“< ?????cin>>Attr;
?????cout<<“\n請輸入標(biāo)識(shí)符的地址:“;
?????cin>>Addr;
?????if?(?Type==3?)
?????{
??????????cout<<“\n請輸入數(shù)組的維數(shù):“;
??????????cin>>Dim;
??????????Numd?=?new?int[Dim];
??????????cout<<“請依次輸入個(gè)維元素個(gè)數(shù):“;
??????????for?(?int?i=0;i>Numd[i];
?????}
?????else?{
??????????Numd?=?new(int);
??????????Dim?=?Numd[0]?=?1;
?????}
?????cout< ????}
Tag(string?nameint?typeint?attrvoid*?addrint?dim=1int*?numd=NULL)
{
Name?=?name;
Type?=?type;
Attr?=?attr;
Addr?=?addr;
Dim?=?dim;
Numd?=?new?int[Dim];
if?(?Dim>1?)
????????????for?(?int?i=0;i ????????else??Numd[0]?=?1;
}
string?Name; //標(biāo)識(shí)符的名字
int?TypeAttrScopDim; //標(biāo)識(shí)符的類型,屬性,作用域,維數(shù)
//?作用域如何記錄?
void*?Addr; //標(biāo)識(shí)符的地址
int*?Numd; //各維元素個(gè)數(shù)
};
Tag*?TagHash[MaxSize];
unsigned?int?APHash(string?s)
{
????unsigned?int?ret=0;
????for?(?int?i=0;i ????{
????????if?(?i&1?)??ret?^=?(~((ret<<11)^s[i]^(ret>>5)));
????????else??ret?^=?((ret<<7)^s[i]^(ret>>3));
????}
????return?ret%MaxP;
}
void?InsertTag(Tag*?T)
{
int?p=APHash(T->Name);
while?(?TagHash[p]!=NULL?)??p?=?(p+1)%MaxSize;
TagHash[p]?=?T;
}
int?SearchTag(string?Name)
{
int?p=APHash(Name);
while?(?TagHash[p]!=NULL?&&?(TagHash[p]->Name)!=Name?)??p?=?(p+1)%MaxSize;
if?(?TagHash[p]==NULL?)??return?-1;
else??return?p;
}
void?DeleteTag(string?Name)
{
int?p=SearchTag(Name);
if?(?p!=-1?)
{
delete?TagHash[p];
TagHash[p]?=?NULL;
cout<<“刪除成功“< }
else??cout<<“標(biāo)識(shí)符未找到“< }
void?PrintTag()
{
????cout<<“\n打印表:“< cout<<“名字\t種類\t屬性\t地址“< for?(?int?i=0;i ?if?(?TagHash[i]!=NULL?)
?{
?cout<Name<<“\t“<Type-1]<<“\t“
?<Attr-1]<<“\t“<Addr< ?}
cout< }
bool?ShowSelTab()
{
cout<<“請選擇符號(hào)表操作:“< cout<<“1.插入標(biāo)識(shí)符\t2.查找標(biāo)識(shí)符\t3.刪除標(biāo)識(shí)符“< cout<<“4.打印全部標(biāo)識(shí)符信息\t0.退出“< int?opt;
cin>>opt;
if?(?opt==0?)??return?false;
if?(?opt==4?)
{
?????????PrintTag();return?true;
????}
cout<<“\n請輸入標(biāo)識(shí)符的名字:“;
string?Name;
cin>>Name;
int?p;
Tag*?T;
switch?(opt)
{
case?1:T=new?Tag(Name);InsertTag(T);break;
case?2:p=SearchTag(Name);
if?(?p!=-1?)
{
cout<<“名字\t種類\t屬性\t地址“< cout<Name<<“\t“<Type-1]<<“\t“
<Attr-1]<<“\t“<
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2013-05-12?22:38??符號(hào)表設(shè)計(jì)與實(shí)現(xiàn)\
?????文件????????3910??2012-04-09?20:56??符號(hào)表設(shè)計(jì)與實(shí)現(xiàn)\main.cpp
?????文件????????1892??2012-03-31?19:31??符號(hào)表設(shè)計(jì)與實(shí)現(xiàn)\OptTag.h
?????文件????????1446??2012-04-09?12:23??符號(hào)表設(shè)計(jì)與實(shí)現(xiàn)\Tag.h
?????文件???????50688??2012-05-21?14:09??編譯原理實(shí)驗(yàn)指導(dǎo)書.doc
評(píng)論
共有 條評(píng)論
相關(guān)資源
-
編譯原理實(shí)驗(yàn)工具及參考源碼(lex&
-
類pascal語言編譯器(編譯原理實(shí)驗(yàn))
-
編譯原理課程設(shè)計(jì):詞法語法編譯器
-
中科院 編譯原理 習(xí)題及解答
-
編譯原理四元式和逆波蘭式
-
《編譯原理》清華大學(xué)版中的pl0擴(kuò)充
-
PL/0功能擴(kuò)充break功能
-
編譯原理LR(0)語法分析
-
編譯原理中間代碼生成程序
-
編譯原理:LR分析程序
-
編譯原理實(shí)驗(yàn):詞法分析,語法分析
-
windows7 x86符號(hào)表part05)
-
吉林大學(xué)編譯原理課件
-
編譯原理龍書答案
-
編譯原理 第三章課后習(xí)題答案
-
易語言變量和數(shù)組的編譯原理
-
編譯原理語法分析器、詞法分析器
-
山東大學(xué)編譯原理PL/0語言 compiler實(shí)驗(yàn)
-
FOR循環(huán)語句的翻譯程序設(shè)計(jì)簡單優(yōu)先
-
NFA的確定化NFA->DFA完整可運(yùn)行代碼
-
哈工大威海編譯原理實(shí)驗(yàn)報(bào)告和源代
-
哈工大威海-編譯原理實(shí)驗(yàn)報(bào)告和源碼
-
編譯原理課設(shè)c編譯器
-
賦值語句翻譯四元式
-
河北工業(yè)大學(xué)編譯原理實(shí)驗(yàn)代碼及實(shí)
-
編譯原理課程設(shè)計(jì) while do循環(huán)語句翻
-
編譯原理課程設(shè)計(jì)do——while簡單優(yōu)先
-
南開大學(xué)編譯原理課件及作業(yè)
-
華工往年編譯原理試卷
-
編譯原理課程設(shè)計(jì)for循環(huán)LR法三元式