/// <summary> /// Experimenta a leitura de um polinómio univariável a partir de uma lista de símbolos. /// </summary> /// <param name="symbolListToParse">A lista de símbolos.</param> /// <param name="value">O valor que receberá o polinómio lido.</param> /// <returns>Verdadeiro caso a leitura seja bem-sucedida e falso caso contrário.</returns> public bool TryParse( ISymbol <string, string>[] symbolListToParse, out UnivariatePolynomialNormalForm <CoeffType> value) { var arrayReader = new ArraySymbolReader <string, string>(symbolListToParse, "eof"); return(this.polynomialReader.TryParsePolynomial(arrayReader, this.conversion, out value)); }
public bool TryParse( ISymbol <string, ESymbolSetType>[] symbolListToParse, out HashSet <ObjectType> value) { var openSymbol = -1; for (int i = 0; i < symbolListToParse.Length; ++i) { var currentSymbol = symbolListToParse[i]; if (currentSymbol.SymbolType == ESymbolSetType.LBRACE) { openSymbol = i; i = symbolListToParse.Length; } else if (currentSymbol.SymbolType != ESymbolSetType.SPACE && currentSymbol.SymbolType != ESymbolSetType.CHANGE_LINE) { i = symbolListToParse.Length; } } if (openSymbol == -1) { value = default(HashSet <ObjectType>); return(false); } else { var closeSymbol = -1; for (int i = symbolListToParse.Length - 1; i > openSymbol; --i) { var currentSymbol = symbolListToParse[i]; if (currentSymbol.SymbolType == ESymbolSetType.RBRACE) { closeSymbol = i; i = openSymbol; } else if (currentSymbol.SymbolType != ESymbolSetType.SPACE && currentSymbol.SymbolType != ESymbolSetType.CHANGE_LINE) { i = openSymbol; } } if (closeSymbol == -1) { value = default(HashSet <ObjectType>); return(false); } else { var elementsNumber = closeSymbol - openSymbol - 1; var elementsArray = new ISymbol <string, ESymbolSetType> [elementsNumber]; Array.Copy(symbolListToParse, openSymbol + 1, elementsArray, 0, elementsNumber); var arraySymbolReader = new ArraySymbolReader <string, ESymbolSetType>(elementsArray, ESymbolSetType.EOF); return(this.expressionReader.TryParse(arraySymbolReader, out value)); } } }
/// <summary> /// Realiza a leitura. /// </summary> /// <remarks> /// Se a leitura não for bem-sucedida, os erros de leitura serão registados no diário /// e será retornado o objecto por defeito. /// </remarks> /// <param name="symbolListToParse">O vector de símbolos a ser lido.</param> /// <param name="errorLogs">O objecto que irá manter o registo do diário da leitura.</param> /// <returns>O valor lido.</returns> public int Parse( ISymbol <string, string>[] symbolListToParse, ILogStatus <string, EParseErrorLevel> errorLogs) { var arrayReader = new ArraySymbolReader <string, string>( symbolListToParse, Utils.GetStringSymbolType(EStringSymbolReaderType.EOF)); var value = this.expressionReader.Parse(arrayReader, errorLogs); return(value); }
/// <summary> /// Realiza a leitura. /// </summary> /// <remarks> /// Se a leitura não for bem-sucedida, os erros de leitura serão registados no diário /// e será retornado o objecto por defeito. /// </remarks> /// <param name="symbolListToParse">O vector de símbolos a ser lido.</param> /// <param name="errorLogs">O objecto que irá manter o registo do diário da leitura.</param> /// <returns>O valor lido.</returns> public virtual ObjectType Parse( ISymbol <string, string>[] symbolListToParse, ILogStatus <string, EParseErrorLevel> errorLogs) { var arrayReader = new ArraySymbolReader <string, string>( symbolListToParse, Utils.GetStringSymbolType(EStringSymbolReaderType.EOF)); var value = default(ObjectType); this.expressionReader.TryParsePolynomial( arrayReader, errorLogs, out value); return(value); }
/// <summary> /// Realiza a leitura. /// </summary> /// <remarks> /// Se a leitura não for bem-sucedida, os erros de leitura serão registados no diário /// e será retornado o objecto por defeito. /// </remarks> /// <param name="symbolListToParse">O vector de símbolos a ser lido.</param> /// <param name="errorLogs">O objecto que irá manter o registo do diário da leitura.</param> /// <returns>O valor lido.</returns> public Polynomial <CoeffType> Parse( ISymbol <string, string>[] symbolListToParse, ILogStatus <string, EParseErrorLevel> errorLogs) { var arrayReader = new ArraySymbolReader <string, string>( symbolListToParse, Utils.GetStringSymbolType(EStringSymbolReaderType.EOF)); var value = default(Polynomial <CoeffType>); this.polynomialReader.TryParsePolynomial( arrayReader, this.conversion, errorLogs, out value); return(value); }
/// <summary> /// Tenta efectuar a leitura. /// </summary> /// <param name="symbolListToParse">A lista de símbolos a ler.</param> /// <param name="value">O valor que contém a leitura.</param> /// <returns>Verdadeiro caso a leitura seja bem-sucedida e falso caso contrário.</returns> public bool TryParse(ISymbol <string, string>[] symbolListToParse, out int value) { var arrayReader = new ArraySymbolReader <string, string>(symbolListToParse, "eof"); return(this.expressionReader.TryParse(arrayReader, out value)); }
/// <summary> /// Realiza a leitura. /// </summary> /// <remarks> /// Se a leitura não for bem-sucedida, os erros de leitura serão registados no diário /// e será retornado o objecto por defeito. /// </remarks> /// <param name="symbolListToParse">O vector de símbolos a ser lido.</param> /// <param name="errorLogs">O objecto que irá manter o registo do diário da leitura.</param> /// <returns>O valor lido.</returns> public HashSet <ObjectType> Parse( ISymbol <string, ESymbolSetType>[] symbolListToParse, ILogStatus <string, EParseErrorLevel> errorLogs) { var value = default(HashSet <ObjectType>); var openSymbol = -1; for (int i = 0; i < symbolListToParse.Length; ++i) { var currentSymbol = symbolListToParse[i]; if (currentSymbol.SymbolType == ESymbolSetType.LBRACE) { openSymbol = i; i = symbolListToParse.Length; } else if (currentSymbol.SymbolType != ESymbolSetType.SPACE && currentSymbol.SymbolType != ESymbolSetType.CHANGE_LINE) { i = symbolListToParse.Length; } } if (openSymbol == -1) { errorLogs.AddLog( "Found no open symbol.", EParseErrorLevel.ERROR); } else { var closeSymbol = -1; for (int i = symbolListToParse.Length - 1; i > openSymbol; --i) { var currentSymbol = symbolListToParse[i]; if (currentSymbol.SymbolType == ESymbolSetType.RBRACE) { closeSymbol = i; i = openSymbol; } else if (currentSymbol.SymbolType != ESymbolSetType.SPACE && currentSymbol.SymbolType != ESymbolSetType.CHANGE_LINE) { i = openSymbol; } } if (closeSymbol == -1) { errorLogs.AddLog( "Found no close symbol.", EParseErrorLevel.ERROR); } else { var elementsNumber = closeSymbol - openSymbol - 1; var elementsArray = new ISymbol <string, ESymbolSetType> [elementsNumber]; Array.Copy(symbolListToParse, openSymbol + 1, elementsArray, 0, elementsNumber); var arraySymbolReader = new ArraySymbolReader <string, ESymbolSetType>(elementsArray, ESymbolSetType.EOF); value = this.expressionReader.Parse(arraySymbolReader, errorLogs); } } return(value); }