/// <summary> /// Obtiene un token /// </summary> internal Token GetToken() { Token objToken = new Token(); // Quita los espacios ConsumeSpaces(); // Recoge un token if (IsEof()) objToken.SystemType = Token.TokenType.Eof; else { bool blnEnd = false; TokenDefinition objTokenNumeric = TokensDefinitions.SearchNumeric(); // Inicializa el tipo de token objToken.SystemType = Token.TokenType.Unknown; // Busca el token foreach (TokenDefinition objDefinition in TokensDefinitions) if (!blnEnd) { if (objTokenNumeric != null && NextCharIsNumeric()) { // Asigna el tipo objToken.SystemType = Token.TokenType.Numeric; objToken.Definition = objTokenNumeric; // Asigna el número objToken.Lexema = ConsumeNumeric(); // Indica que ha terminado blnEnd = true; } else if (!objDefinition.IsNumeric && GetChars(objDefinition.Start.Length) == objDefinition.Start) { // Asigna el tipo objToken.SystemType = Token.TokenType.Defined; objToken.Definition = objDefinition; // Asigna el contenido objToken.Lexema = objDefinition.Start; // Consume la cadena Consume(objDefinition.Start); // Busca hasta el final if (!string.IsNullOrEmpty(objDefinition.End)) { // En el lexema mete el contenido if (objDefinition.End == "\"") objToken.Lexema = ConsumeString(); else { // Obtiene el contenido objToken.Lexema = ConsumeTo(objDefinition.End); // Consume la cadena de fin Consume(objDefinition.End); } } // Indica que se ha terminado blnEnd = true; } } // Si no se ha terminado consume hasta el siguiente espacio if (!blnEnd) objToken.Lexema = ConsumeTo(cnstArrStrSpaces); } // Devuelve el token return objToken; }
/// <summary> /// Obtiene el tipo de un token /// </summary> private TokenType GetIDType(Token objToken) { if (objToken != null && objToken.Definition != null) return (TokenType) (objToken.Definition.Type ?? 0); else return TokenType.Unknown; }
/// <summary> /// Obtiene los datos del siguiente token /// </summary> private void GetNextToken(ParserTokenizer objTokenizer) { objActualToken = objTokenizer.GetToken(); intIDActualType = GetIDType(objActualToken); }