static Declaration ParseOperand(Expression exp, Block block, Token arg1, Token arg2) { Declaration decl = null; switch (exp.Tokens[0]) { case "+": case "-": case "*": case "/": decl = MathStatement.BuildStatements(block, exp, arg1, arg2); break; case StoreToken: decl = block.CreateTempDeclaration(TypeHelper.GetType(block, arg2)); var assignCopy = AssignmentHelper.ParseSingle(block, decl, arg2); block.Statements.Add(assignCopy); var storeStatement = new Store(Datum.Parse(block, arg1), Datum.Parse(block, Tokenizer.ToToken(decl.Name))); block.Statements.Add(storeStatement); break; case "=": decl = block.FindDeclaration(arg1); ValueStatement initialAssign = AssignmentHelper.ParseSingle(block, decl, arg2); block.Statements.Add(initialAssign); break; case "==": case "<=": case "<": case ">": case ">=": case "!=": Token condLHS; Token condRHS; Declaration tmpDecl = block.FindDeclaration(arg1); if (tmpDecl == null) { condRHS = arg1; condLHS = arg2; } else { condLHS = arg1; condRHS = arg2; } decl = ConditionStatement.BuildStatements(block, exp, condLHS, condRHS); break; case "%": break; } return(decl); }
public static void Parse(Block block, Declaration LValue, List <Token> tokenList) { Annotation ann = new Annotation(LValue + " = " + string.Join <Token>(" ", tokenList) + ";"); block.Statements.Add(ann); Token token = InternalParse(block, new Expression(tokenList)); var finalAssign = AssignmentHelper.ParseSingle(block, LValue, token); block.Statements.Add(finalAssign); }