/// <summary> /// Funcion que identifica a que tipo de componente lexico pertenece el /// caracter leido de la cadena de entrada /// </summary> /// <param name="parRes">Siguiente caracter leido de la cadena de entrada</param> /// <returns>Retorna un tipo entero indicando el Id de la tabla al que pertenece /// el carcater leido</returns> public int tipoDeSimbolo(char parRes) { char cCar = parRes; CBuscarConcordancia objCBuscarConcordancia = new CBuscarConcordancia(); if (objCBuscarConcordancia.IsCaracterEspecial(cCar) == true) { if (objCBuscarConcordancia.IsopAritmetico(cCar) == true) { return(4); } else if (objCBuscarConcordancia.IsopLogico(cCar) == true) { return(5); } else if (objCBuscarConcordancia.IsopRelacional(cCar) == true) { return(6); } else if (objCBuscarConcordancia.IsopAsignacion(cCar) == true) { return(7); } else if (objCBuscarConcordancia.IsParentesisCircular(cCar) == true) { return(8); } else if (objCBuscarConcordancia.IsParentesisCuadrado(cCar) == true) { return(9); } else if (objCBuscarConcordancia.IsLlaves(cCar) == true) { return(10); } } else if (objCBuscarConcordancia.IsCaracterAlfabeto(cCar) == true) { return(2); } else if (WindowsApplication1.CBuscarConcordancia.IsDigito(cCar) == true) { return(3); } else if (cCar == '\n') //Caracter Fin de linea { return(11); } else if (cCar == '\x0') { return(12); //Caracter Fin de Archivo } return(-1); //Simbolo no reconocido }
/// <summary> /// Identifica cual es el patron de concordancia con el que encaja la cadena leida /// de la cadena de entrada /// </summary> /// <param name="parCadena">Cadena de Entrada proporcionada por el usuario</param> /// <param name="iAf">Apuntador Fijo en la cadena de entrada</param> /// <param name="iAm">Apuntador Movil en la cadena de entrada</param> /// <param name="sRes">Variable de control entre funciones</param> /// <param name="sRes2">Variable de control entre funciones</param> /// <returns>True si encontro una concordancia, FALSE en caso contrario</returns> public bool buscarConcordancia(string parCadena, ref int iAf, ref int iAm, out string sRes, out string sRes2) { string sCadena = parCadena; string sLexema = string.Empty; bool bConcordancia = false; sRes = string.Empty; sRes2 = string.Empty; char cCar = sCadena[iAm]; CBuscarConcordancia objCBuscarConcordancia = new CBuscarConcordancia(); CAnalizadorLexico objCAnalizadorLexico = new CAnalizadorLexico(); //Espacios if (cCar == ' ') { cCar = objCAnalizadorLexico.sgteCar(sCadena, ref iAm); bConcordancia = true; } //Identificadores,Palabras Reservadas else if (objCBuscarConcordancia.IsEstadoTerminalPalabraReservada(sCadena, cCar, ref iAm) == true) { sLexema = CAnalizadorLexico.extraerLexema(sCadena, ref iAf, ref iAm); if (objCBuscarConcordancia.IsPalabraReservada(sLexema) == false) { //Verificar si el Identificador ya existe para no agregarlo if (objCBuscarConcordancia.IsExistsIdentificador(sLexema) == true) { sRes = "Identificador"; } //Identificador Nuevo else { CCompoLex.iIdentificador.Add(sLexema); sRes = "Identificador"; } } bConcordancia = true; } else if (objCBuscarConcordancia.IsNumero(sCadena, cCar, ref iAm, out sRes)) { switch (sRes) { case "NumEntero": bConcordancia = true; //Agregar simbolo a la tabla sLexema = extraerLexema(sCadena, ref iAf, ref iAm); CCompoLex.NumerosEnteros.Add(sLexema); sRes = "Numero"; sRes2 = "Entero"; break; case "NumReal": bConcordancia = true; //Agregar simbolo a la tabla sLexema = extraerLexema(sCadena, ref iAf, ref iAm); CCompoLex.NumerosFlotantes.Add(sLexema); sRes = "Numero"; sRes2 = "Real"; break; case "NumExpCientifica": bConcordancia = true; //Agregar simbolo a la tabla sLexema = extraerLexema(sCadena, ref iAf, ref iAm); CCompoLex.NumerosNotacionCientifica.Add(sLexema); sRes = "Numero"; sRes2 = "NotacionCientifica"; break; default: sRes = ""; sRes2 = ""; break; } } //Operador Aritmetico else if (objCBuscarConcordancia.IsEstadoTerminalOpAritmetico(sCadena, cCar, ref iAf, ref iAm) == true) { bConcordancia = true; } //Operador Logico else if (objCBuscarConcordancia.IsEstadoTerminalOpLogico(sCadena, cCar, ref iAf, ref iAm) == true) { bConcordancia = true; } //Operador Relacional else if (objCBuscarConcordancia.IsEstadoTerminalOpRelacional(sCadena, cCar, ref iAf, ref iAm) == true) { bConcordancia = true; } //Operador Asignacion else if (objCBuscarConcordancia.IsopAsignacion(cCar) == true) { bConcordancia = true; cCar = objCAnalizadorLexico.sgteCar(sCadena, ref iAm); } //Parentesis Circular else if (objCBuscarConcordancia.IsParentesisCircular(cCar) == true) { bConcordancia = true; cCar = objCAnalizadorLexico.sgteCar(sCadena, ref iAm); } //Parentesis Cuadrado else if (objCBuscarConcordancia.IsParentesisCuadrado(cCar) == true) { bConcordancia = true; cCar = objCAnalizadorLexico.sgteCar(sCadena, ref iAm); } //Llaves else if (objCBuscarConcordancia.IsLlaves(cCar) == true) { bConcordancia = true; cCar = objCAnalizadorLexico.sgteCar(sCadena, ref iAm); } //Algun otro caracter especial else if (objCBuscarConcordancia.IsCaracterEspecial(cCar)) { bConcordancia = true; cCar = objCAnalizadorLexico.sgteCar(sCadena, ref iAm); } //Fin de Linea else if (cCar == '\n') { bConcordancia = true; cCar = objCAnalizadorLexico.sgteCar(sCadena, ref iAm); } //Fin de Archivo else if (cCar == '\x0') { bConcordancia = false; sRes = "EOF"; } //Simbolo no reconocido else { bConcordancia = true; cCar = objCAnalizadorLexico.sgteCar(sCadena, ref iAm); } return(bConcordancia); }