⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 type.cpp

📁 编译原理的作业 编译器
💻 CPP
字号:
#include "type.h"


StringPool::StringPool()
:_curPos(0)
{
}

int StringPool::Add(const char* str)
{
	MapBucket b;
	b = _indexer.Exsits(MapBucket(str));
	if (b._index != -1)
	{
		return b._index;
	}
	
	b._index = _curPos;
	b._str = str;
	strcpy(_pool + _curPos, str);
	_curPos += (strlen(str) + 1);

	_indexer.Insert(b);
	return b._index;
}


void StringPool::Store(FILE* fp)
{
	fwrite(_pool, sizeof(char), _curPos, fp);
}



FieldDesc::FieldDesc()
:_name(0), _size(0), _type(Void)
{
}

MethodDesc::MethodDesc()
:_addr(0), _isEntry(false), _maxStack(0), _name(0), _retType(Void)
{
}

MetaDataDesc::MetaDataDesc()
{
}

void MetaDataDesc::AddMethod(MethodDesc& method)
{
	_methods.PushBack(method);
}

void MetaDataDesc::Store(FILE* file)
{
	List<FieldDesc>::Iterator fi(_fields);
	List<MethodDesc>::Iterator mi(_methods);

	for (fi.First(); !fi.IsDone(); fi.Next())
	{
		fwrite(&(fi.Current()), sizeof(FieldDesc), 1, file);
	}
	for (mi.First(); !mi.IsDone(); mi.Next())
	{
		fwrite(&(mi.Current()), sizeof(MethodDesc), 1, file); 
	}
}

int Key(const MethodBucket& b)
{
	return (int)(b._name) % PRIME;
}

int Key(const MapBucket& b)
{
	return (int)((b._str)[0] % PRIME);
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -