📄 tabla_simbolos.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 + -