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

📄 tabla_simbolos.h

📁 Compiler with latex grammar
💻 H
字号:
#ifndef TABLA_SIMBOLOS_H
#define TABLA_SIMBOLOS_H
#include "Token.h"
using namespace std;


class Tabla_Simbolos{

private:
	map< string, int, less<string> > *Palabras_Reservadas;
	map< string, int, less<string> > *Simbolos_Puntuacion;
	
	vector< Token > *Tokens_Asociados;
	
	void Iniciar( map<string, int> *tabla, string nombre, int offset )
	{
		ifstream Entrada( nombre.data() );
		int cant;
		char lexema[64];
		if ( !Entrada )	return;
		
		Entrada>>cant;
		Entrada.getline( lexema, 64 );
		for( int i=0; i<cant; i++ )
		{
			Entrada.getline( lexema, 64 );
			tabla->insert( make_pair<string, int>(string(lexema),i+offset) );
		}
	}
	
public:
	Tabla_Simbolos()
	{
		Palabras_Reservadas = new map<string, int>;
		Simbolos_Puntuacion = new map<string, int>;
		Iniciar( Palabras_Reservadas, "pal_reservada.txt", 100 );
		Iniciar( Simbolos_Puntuacion, "sim_puntuacion.txt", 500 );

		Tokens_Asociados = new vector< Token >;
	}
	int esPalabra_Reservada( string tmp )
	{
		map<string,int>::iterator p;
		p = Palabras_Reservadas->find( tmp );	
		if( p == Palabras_Reservadas->end() )
			return -1;
		return p->second;
	}
	int esSimbolo_Puntuacion( char t )
	{	
		string tmp = "";
		tmp+=t;
		map<string,int>::iterator p;
		p = Simbolos_Puntuacion->find( tmp );
		if( p == Simbolos_Puntuacion->end() )
			return -1;
		return p->second;
	}
	void Agregar( string tmp, int val, int linea )
	{	
		Tokens_Asociados->push_back( Token(val, tmp, linea) );	
	}
	void Imprimir()
	{
		vector< Token >::const_iterator p = Tokens_Asociados->begin();
						
		while( p!= Tokens_Asociados->end() )
		{

			((Token)(*p)).Imprimir();
			p++;
		}
	}

	void Empilar( stack<int> &Pila )
	{
		vector< Token >::const_iterator p = Tokens_Asociados->begin();

		while( p!=Tokens_Asociados->end() )
		{
			Pila.push( ((Token)(*p)).getTipo() );
		}
	}
};

#endif

⌨️ 快捷键说明

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