本文整理汇总了C++中Token::SetLexema方法的典型用法代码示例。如果您正苦于以下问题:C++ Token::SetLexema方法的具体用法?C++ Token::SetLexema怎么用?C++ Token::SetLexema使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Token
的用法示例。
在下文中一共展示了Token::SetLexema方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ObtenerSiguienteTokenPascal
Token Lexico::ObtenerSiguienteTokenPascal()
{
Token token;
string lexema;
char c;
int estado_automata = 0; //Estado inicial del automata
int longitud_cadenas = 0;
while (true)
{
c = codigo_fuente->LeerCaracter();
switch ( estado_automata )
{
//Estado 0 se encarga de "comerse" los espacios en blanco y caracter de nueva linea
case 0:
if ( Util::EsLetra( c ) )
{
lexema+= Util::ToUpper(c);
estado_automata = 1;
codigo_fuente->Avanzar();
}
else if ( c == '+' )//Operadores aditivos
{
lexema+=c;
estado_automata = 2;
codigo_fuente->Avanzar();
}
else if ( c == '-' )
{
lexema+=c;
codigo_fuente->Avanzar();
token.SetLexema(lexema);
token.SetTipo(op_resta);
return token;
}
else if( c == '*' )
{
lexema+=c;
codigo_fuente->Avanzar();
token.SetLexema(lexema);
token.SetTipo( op_mul );
return token;
}
else if ( c == '=' )
{
lexema+=c;
codigo_fuente->Avanzar();
token.SetLexema(lexema);
token.SetTipo( op_igual );
return token;
}
else if( c== '\n')//Se "come" los caracteres de nueva linea
{
linea_actual++;
estado_automata = 0;
codigo_fuente->Avanzar();
}
else if( c== EOF ) //El archivo llego a su fin
{
estado_automata = 4;
}
else if ( c== ' ' || c=='\t' )//Espacios y tabulaciones
{
estado_automata = 0;
codigo_fuente->Avanzar();
}
else if( c=='/' )//Comentarios u operador de division
{
estado_automata = 5;
codigo_fuente->Avanzar();
}
else if( Util::EsDigito( c ) && c != '0' ) //Decimal
{
lexema+=c;
estado_automata = 7;
codigo_fuente->Avanzar();
}
else if( c == '0')//Octal
{
lexema+=c;
estado_automata = 8;
codigo_fuente->Avanzar();
}
else if ( c == '$' )//Hexadecimal
{
lexema+=c;
estado_automata=12;
codigo_fuente->Avanzar();
}
else if ( c == '.' )//Punto flotante
{
lexema+=c;
estado_automata = 24;
codigo_fuente->Avanzar();
}
else if ( c == '\'' )//string
{
lexema+=c;
estado_automata = 17;
codigo_fuente->Avanzar();
//.........这里部分代码省略.........
示例2: ObtenerSiguienteTokenHTML
Token Lexico::ObtenerSiguienteTokenHTML()
{
Token token;
string lexema;
char c;
int estado_automata = 0;
while ( true )
{
c = codigo_fuente->LeerCaracter();
switch ( estado_automata )
{
case 0:
if ( c==' ' || c== '\t' )
{
estado_automata = 0;
codigo_fuente->Avanzar();
}
else if ( c == '\n' )
{
estado_automata = 0;
linea_actual++;
codigo_fuente->Avanzar();
}
else if ( c == EOF )
{
token.SetLexema("EOF");
token.SetTipo(eof);
return token;
}
else
{
estado_automata = 1;
}
break;
case 1:
if ( c != '<' && c != EOF )
{
if ( c == '\n' )
linea_actual++;
lexema+=c;
estado_automata = 1;
codigo_fuente->Avanzar();
}
else if ( c == EOF )
{
token.SetLexema(lexema);
token.SetTipo(html);
return token;
}
else if( c == '<' )
{
estado_automata = 2;
codigo_fuente->Avanzar();
}
break;
case 2:
if ( c == '%' )
{
token.SetLexema(lexema);
token.SetTipo(html);
codigo_fuente->Retroceder();
modo_html = false;
return token;
}
else
{
if ( c == '\n' )
linea_actual++;
lexema+='<';
lexema+=c;
estado_automata = 1;
codigo_fuente->Avanzar();
}
}//FIN switch
}
}
示例3: MapInit
void Lexico::MapInit()
{
Token token;
//Keywords
token.SetLexema("IF");
token.SetTipo(kw_if);
palabras_reservadas.insert(pair<string,Token>("IF",token) );
token.SetLexema("AND");
token.SetTipo(op_and);
palabras_reservadas.insert(pair<string,Token>("AND",token) );
token.SetLexema("ARRAY");
token.SetTipo(kw_array);
palabras_reservadas.insert( pair<string,Token>("ARRAY",token) );
token.SetLexema("BEGIN");
token.SetTipo(kw_begin);
palabras_reservadas.insert( pair<string,Token>("BEGIN",token) );
token.SetLexema("CASE");
token.SetTipo(kw_case);
palabras_reservadas.insert( pair<string,Token>("CASE",token) );
token.SetLexema("DIV");
token.SetTipo(op_divent);
palabras_reservadas.insert( pair<string,Token>("DIV",token) );
token.SetLexema("DO");
token.SetTipo(kw_do);
palabras_reservadas.insert( pair<string,Token>("DO",token) );
token.SetLexema("DOWNTO");
token.SetTipo(kw_downto);
palabras_reservadas.insert( pair<string,Token>("DOWNTO",token) );
token.SetLexema("ELSE");
token.SetTipo(kw_else);
palabras_reservadas.insert( pair<string,Token>("ELSE",token) );
token.SetLexema("END");
token.SetTipo(kw_end);
palabras_reservadas.insert( pair<string,Token>("END",token) );
token.SetLexema("FOR");
token.SetTipo(kw_for);
palabras_reservadas.insert( pair<string,Token>("FOR",token) );
token.SetLexema("FUNCTION");
token.SetTipo(kw_funcion);
palabras_reservadas.insert( pair<string,Token>("FUNCTION",token) );
token.SetLexema("MOD");
token.SetTipo(op_mod);
palabras_reservadas.insert( pair<string,Token>("MOD",token) );
token.SetLexema("NOT");
token.SetTipo(kw_not);
palabras_reservadas.insert( pair<string,Token>("NOT",token) );
token.SetLexema("OF");
token.SetTipo(kw_of);
palabras_reservadas.insert( pair<string,Token>("OF",token) );
token.SetLexema("OR");
token.SetTipo(kw_or);
palabras_reservadas.insert( pair<string,Token>("OR",token) );
token.SetLexema("PROCEDURE");
token.SetTipo(kw_procedimiento);
palabras_reservadas.insert( pair<string,Token>("PROCEDURE",token) );
token.SetLexema("PROGRAM");
token.SetTipo(kw_program);
palabras_reservadas.insert( pair<string,Token>("PROGRAM",token) );
token.SetLexema("RECORD");
token.SetTipo(kw_record);
palabras_reservadas.insert( pair<string,Token>("RECORD",token) );
token.SetLexema("REPEAT");
token.SetTipo(kw_repeat);
palabras_reservadas.insert( pair<string,Token>("REPEAT",token) );
token.SetLexema("THEN");
token.SetTipo(kw_then);
palabras_reservadas.insert( pair<string,Token>("THEN",token) );
token.SetLexema("TO");
token.SetTipo( kw_to);
palabras_reservadas.insert( pair<string,Token>("TO",token) );
token.SetLexema("TYPE");
token.SetTipo(kw_tipo);
palabras_reservadas.insert( pair<string,Token>("TYPE",token) );
token.SetLexema("UNTIL");
token.SetTipo(kw_until);
palabras_reservadas.insert( pair<string,Token>("UNTIL",token) );
//.........这里部分代码省略.........