当前位置: 首页>>代码示例>>C++>>正文


C++ Token::SetLexema方法代码示例

本文整理汇总了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();
//.........这里部分代码省略.........
开发者ID:Struka9,项目名称:Embeded-Pascal-Compiler,代码行数:101,代码来源:Lexico.cpp

示例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
		
	}
}
开发者ID:Struka9,项目名称:Embeded-Pascal-Compiler,代码行数:85,代码来源:Lexico.cpp

示例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) );
//.........这里部分代码省略.........
开发者ID:Struka9,项目名称:Embeded-Pascal-Compiler,代码行数:101,代码来源:Lexico.cpp


注:本文中的Token::SetLexema方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。