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

📄 labelstack.h

📁 一个面向对像语言的编译器
💻 H
字号:
// LabelStack.h: interface for the LabelStack class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_LABELSTACK_H__8213DBEA_9C6C_4957_A9F3_2AEAE9A67D36__INCLUDED_)
#define AFX_LABELSTACK_H__8213DBEA_9C6C_4957_A9F3_2AEAE9A67D36__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "string.h"
#include "codegen.h"
#define MAX_LABEL_STACK_COUNT 512
#include "Assert.h"
#define Assert assert
#define MAX_NO_OF_FUNC 512
extern CodeGenerator * cg;

class FunNameList
{
private:
	int size;
	const char * fns[256];
public:
	void Clear()
	{
		size=0;
	}
	FunNameList()
	{
		size=0;
	}
	~FunNameList()
	{
	}
	void Insert(const char * fn)
	{

		if(!LookUp(fn))
		{
			fns[size]=strdup(fn);
			size++;
		}

	}
	bool LookUp(const char * fn)
	{
		int i;
		for(i=0;i<size;i++)
			if(!strcmp(fns[i],fn))
				return true;
		return false;
	}
	int GetCount(){return size;};
    const char * GetAt(int i )
	{
		return fns[i];
	}
	


	
};

class LabelStack
{
public:
	LabelStack(){ top=-1;}
	~LabelStack()
	{
		top=-1;
	}
	void Push(const char * name)
	{
		top++;
		Assert(top<MAX_LABEL_STACK_COUNT);
		stack[top]=strdup(name);

	}
	void Push(int n)
	{
		
		Assert(n>0);
		int i;
		for(i=0;i<n;i++)
		{
			Push(cg->NewLabel());
		}
	}
	void Pop()
	{
		Assert(top>=0);
		top--;
	}
	void Pop(int n)
	{
		Assert(n>0);
		int i;
		for(i=0;i<n;i++)
			Pop();
	}
	const char * GetFromTop(int n=0)
	{
		Assert(top-n>=0);
		return stack[top-n];
	}
private:
	const char * stack[MAX_LABEL_STACK_COUNT];
	int  top;
};


#endif // !defined(AFX_LABELSTACK_H__8213DBEA_9C6C_4957_A9F3_2AEAE9A67D36__INCLUDED_)

⌨️ 快捷键说明

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