public static IBoolable BuildTimTim(string name, List <Argument> args) { if (args.Count != 2) { throw new SyntaxErrorException("ERROR! Function " + name + " has to have 2 time arguments."); } ITimeable itim1 = TimeableBuilder.Build(args[0].tokens); ITimeable itim2 = TimeableBuilder.Build(args[1].tokens); if (itim1.IsNull()) { throw new SyntaxErrorException("ERROR! First argument of function " + name + " cannot be read as time."); } if (itim2.IsNull()) { throw new SyntaxErrorException("ERROR! Second argument of function " + name + " cannot be read as time."); } if (name.Equals("samedate") || name.Equals("samedates") || name.Equals("thesamedate") || name.Equals("thesamedates")) { return(new FuncSamedates(itim1, itim2)); } else if (name.Equals("sameclock") || name.Equals("sameclocks") || name.Equals("thesameclock") || name.Equals("thesameclocks")) { return(new FuncSamedates(itim1, itim2)); } throw new SyntaxErrorException("ERROR! Function " + name + " not identified."); }
public static INumerable BuildTimTim(string name, List <Argument> args) { if (args.Count != 2) { throw new SyntaxErrorException("ERROR! Function " + name + " has to have 2 time arguments."); } ITimeable itim1 = TimeableBuilder.Build(args[0].tokens); ITimeable itim2 = TimeableBuilder.Build(args[1].tokens); if (itim1.IsNull()) { throw new SyntaxErrorException("ERROR! First argument of function " + name + " cannot be read as time."); } if (itim2.IsNull()) { throw new SyntaxErrorException("ERROR! Second argument of function " + name + " cannot be read as time."); } if (name.Equals("yearsbetween")) { return(new Func__TimeBetween(itim1, itim2, TimeVariableType.Year)); } else if (name.Equals("monthsbetween")) { return(new Func__TimeBetween(itim1, itim2, TimeVariableType.Month)); } else if (name.Equals("daysbetween")) { return(new Func__TimeBetween(itim1, itim2, TimeVariableType.Day)); } else if (name.Equals("hoursbetween")) { return(new Func__TimeBetween(itim1, itim2, TimeVariableType.Hour)); } else if (name.Equals("minutesbetween")) { return(new Func__TimeBetween(itim1, itim2, TimeVariableType.Minute)); } else if (name.Equals("secondsbetween")) { return(new Func__TimeBetween(itim1, itim2, TimeVariableType.Second)); } throw new SyntaxErrorException("ERROR! Function " + name + " not identified."); }
public static INumerable BuildTim(string name, List <Argument> args) { if (args.Count != 1) { throw new SyntaxErrorException("ERROR! Function " + name + " has to have 1 time argument."); } ITimeable itim = TimeableBuilder.Build(args[0].tokens); if (itim.IsNull()) { throw new SyntaxErrorException("ERROR! Argument of function " + name + " cannot be read as time."); } if (name.Equals("yearday") || name.Equals("dayofyear")) { return(new FuncYearday(itim)); } throw new SyntaxErrorException("ERROR! Function " + name + " not identified."); }
public static ICommand Build(List <Token> tokens) { string name = tokens[0].GetContent(); tokens.RemoveAt(0); tokens.RemoveAt(0); if (tokens.Count == 0) { throw new SyntaxErrorException("ERROR! Variable " + name + " has no assigned value."); } if (name.Contains('.')) { return(BuildWithPoint(tokens, name)); } if (!InterVariables.GetInstance().Contains(name)) { IListable value = ListableBuilder.Build(tokens); if (value.IsNull()) { throw new SyntaxErrorException("ERROR! There are is something wrong with assigning value to variable " + name + "."); } if (value is IBoolable) { InterVariables.GetInstance().Add(name, InterVarType.Bool); return(new BoolDeclaration(name, (IBoolable)value)); } else if (value is INumerable) { InterVariables.GetInstance().Add(name, InterVarType.Number); return(new NumericDeclaration(name, (INumerable)value)); } else if (value is ITimeable) { InterVariables.GetInstance().Add(name, InterVarType.Time); return(new TimeDeclaration(name, (ITimeable)value)); } else if (value is IStringable) { InterVariables.GetInstance().Add(name, InterVarType.String); return(new StringDeclaration(name, (IStringable)value)); } else { InterVariables.GetInstance().Add(name, InterVarType.List); return(new ListDeclaration(name, value)); } } else { InterVar ivar = InterVariables.GetInstance().GetVar(name); if (ivar.IsBool()) { IBoolable value = BoolableBuilder.Build(tokens); if (value.IsNull()) { throw new SyntaxErrorException("ERROR! Value assigned to variable " + name + " must be logical."); } return(new BoolDeclaration(name, value)); } else { if (ivar.IsNumber()) { INumerable value = NumerableBuilder.Build(tokens); if (value.IsNull()) { throw new SyntaxErrorException("ERROR! Value assigned to variable " + name + " must be numeric."); } return(new NumericDeclaration(name, value)); } else if (ivar.IsTime()) { ITimeable value = TimeableBuilder.Build(tokens); if (value.IsNull()) { throw new SyntaxErrorException("ERROR! Value assigned to variable " + name + " must be time."); } return(new TimeDeclaration(name, value)); } else if (ivar.IsString()) { IStringable value = StringableBuilder.Build(tokens); if (value.IsNull()) { throw new SyntaxErrorException("ERROR! Value assigned to variable " + name + " must be text."); } return(new StringDeclaration(name, value)); } else { IListable value = ListableBuilder.Build(tokens); if (value.IsNull()) { throw new SyntaxErrorException("ERROR! Value assigned to variable " + name + " must be list."); } return(new ListDeclaration(name, value)); } } } }
public static ICommand Build(List <Token> tokens) { TokenType type = tokens[0].GetTokenType(); string name = type.Equals(TokenType.Recreate) ? "recreate" : (type.Equals(TokenType.Remodify) ? "remodify" : "reaccess"); tokens.RemoveAt(0); if (tokens.Where(t => t.GetTokenType().Equals(TokenType.To)).Count() > 1) { throw new SyntaxErrorException("ERROR! In " + name + " command keyword 'to' occurs too many times."); } List <Token> part1 = new List <Token>(); List <Token> part2 = new List <Token>(); bool pastTo = false; foreach (Token tok in tokens) { if (tok.GetTokenType().Equals(TokenType.To)) { pastTo = true; } else { if (pastTo) { part2.Add(tok); } else { part1.Add(tok); } } } if (part2.Count == 0) { throw new SyntaxErrorException("ERROR! Command " + name + " is too short and do not contain all necessary information."); } ITimeable expression2 = TimeableBuilder.Build(part2); if (expression2.IsNull()) { throw new SyntaxErrorException("ERROR! Second part of command " + name + " cannot be read as time."); } if (part1.Count == 0) { return(BuildSimple(type, expression2)); } else { IListable expression1 = ListableBuilder.Build(part1); if (expression1.IsNull()) { throw new SyntaxErrorException("ERROR! First part of command " + name + " cannot be read as list."); } return(BuildComplex(type, expression1, expression2)); } }