//Metodi statici /// <summary> /// Metodo Factory, istanzia le funzioni /// </summary> /// <param name="sign">Firma di una funzione</param> /// <param name="lm">Gestore dei messaggi</param> /// <param name="lineNumber">Numero di linea del documento</param> /// <param name="checkSign">Controlla l'integrita della firma inserita</param> /// <returns>Funzione estratta dalla firma, oppure null</returns> static public Function GetFunctionBySign(string sign, LogManager lm, int lineNumber = -1, bool checkSign = true) { if (Regex.Match(sign, @"#(.*)\s*\[", RegexOptions.None).Success) //Se è una firma in un formato riconosciuto { //Situazione: #programma(sicuro,massimo)[ sign = sign.Trim('#', '['); //Rimuove i simboli //Situazione: programma(sicuro,massimo) Match _match = Regex.Match(sign, @"\((.*)\)\s*", RegexOptions.None); //Inidividua singolarmente i parametri if (_match.Success) { return(new Function(sign.Substring(0, _match.Index), CodeCleaner.RemoveWhiteSpace(_match.Value, lm).Trim('(', ')').Split(','), lineNumber, lm)); //Genera funzione con parametri } else { return(new Function(sign, lineNumber, lm)); //Genera funzione senza parametri } } else { lm.Add("The string \'" + sign + "\' is not a functions string", lineNumber); return(null); } }