Esempio n. 1
0
        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;
                }
            }
        }
Esempio n. 2
0
        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);
        }