static void ExecuteVarDecl(VarDeclCmd cmd) { if (Memory.Exists(cmd.varName)) { Console.WriteLine(cmd.varName + " is already declared"); } else { var value = new Memory.Variable(); if (cmd.initializer != null) { value = ExpressionEvaluator.Evaluate(cmd.initializer); } switch (cmd.scope) { case VarDeclCmd.Scope.GLOBAL: Memory.SaveGlobal(cmd.varName, value); break; case VarDeclCmd.Scope.LOCAL: Memory.Save(cmd.varName, value); break; } } }
static Command CreateVarDeclCommand(ParsingInfo info) { VarDeclCmd cmd = new VarDeclCmd(); var scopeToken = info.MandatoryToken <IdToken>("scope"); switch (scopeToken.Value) { case "local": cmd.scope = VarDeclCmd.Scope.LOCAL; break; case "global": cmd.scope = VarDeclCmd.Scope.GLOBAL; break; } var varNameToken = info.MandatoryToken <IdToken>("varName"); cmd.varName = varNameToken.Value; var init = info.GetChild("VarInit"); if (init != null) { var expr = init.MandatoryChild("expr"); cmd.initializer = CreateExpression(expr); } return(cmd); }