예제 #1
0
        public static string basicOperaticonsSingle(string line, variables vars)
        {
            string[] lineSplits = line.Split(' ');
            string   a;
            string   sign = lineSplits[0];
            string   ans  = "";


            if (vars.ValueExists(lineSplits[1]))
            {
                a = vars.GetValue(lineSplits[1]).TrimStart('*');
            }
            else
            {
                a = lineSplits[1].TrimStart('*');
            }

            switch (sign)
            {
            case "!":
                ans = negation(a);
                break;
            }

            return(ans);
        }
예제 #2
0
        private static void GetParameters(string parameters, string values, variables vars, variables mainVars)
        {
            string[] par = parameters.Split(' ');
            string[] val = values.Split(' ');

            for (int i = 0; i < par.Length; i++)
            {
                vars.SetValue(par[i], (mainVars.ValueExists(val[i])?mainVars.GetValue(val[i]) : val[i]));
            }
        }
예제 #3
0
        public static string basicOperations(string line, variables vars)
        {
            string[] lineSplits = line.Split(' ');
            string   a, b;
            string   sign = lineSplits[1];
            string   ans  = "";


            if (vars.ValueExists(lineSplits[0]))
            {
                a = vars.GetValue(lineSplits[0]).TrimStart('*');
            }
            else
            {
                a = lineSplits[0].TrimStart('*');
            }

            if (vars.ValueExists(lineSplits[2]))
            {
                b = vars.GetValue(lineSplits[2]).TrimStart('*');
            }
            else
            {
                b = lineSplits[2].TrimStart('*');
            }


            switch (sign)
            {
            case "+":
                ans = Adding(a, b);
                break;

            case "-":
                ans = Subtracting(a, b);
                break;

            case "*":
                ans = Multiply(a, b);
                break;

            case "/":
                ans = Dividing(a, b);
                break;

            case "&":
                ans = And(a, b);
                break;

            case "|":
                ans = Or(a, b);
                break;

            case "^":
                ans = Same(a, b);
                break;

            case "<":
                ans = SmallerThan(a, b);
                break;

            case ">":
                ans = BiggerThan(a, b);
                break;

            case "%":
                ans = mod(a, b);
                break;
            }
            return(ans);
        }
예제 #4
0
        public string GetValue(string Svalue, ref int Line)
        {
            string retValue = "";

            if (Line == SkipLine)
            {
                return("");
            }

            if (Svalue == "")
            {
                return("");
            }

            if (loopNumber > 0)
            {
                loopNumber--;
                Line--;
                var.SetValue(LoopName, (loopVar).ToString());
                if (loopNumber == 0)
                {
                    SkipLine = Line + 1;
                }

                loopVar++;
            }

            if (Regex.Match(Svalue, "IN").Value == Svalue)//pro in
            {
                retValue = InOut.input();
            }
            else if (Regex.Match(Svalue, "^IF\\(.+\\)").Value == Svalue)//pro if
            {
                string work = Svalue.Split('(')[1].TrimEnd(')');
                string toIf = GetValue(work, ref Line);
                if (!Convert.ToBoolean(toIf))
                {
                    SkipLine = Line + 1;
                }
                else
                {
                    SkipLine = Line + 2;
                }
            }
            else if (Regex.Match(Svalue, "^LOOP\\(.+\\)").Value == Svalue)//pro loop
            {
                string   work  = Svalue.Split('(')[1].TrimEnd(')');
                string[] split = work.Split(' ');
                if (split.Length == 2)
                {
                    var.SetValue(split[0], "0");
                    loopNumber = Convert.ToInt32(GetValue(split[1], ref Line));
                    LoopName   = split[0];
                    loopVar    = 0;
                }
                else
                {
                    loopNumber = Convert.ToInt32(GetValue(split[0], ref Line));
                }
            }
            else if (Regex.Match(Svalue, "(\\*?[A-Za-z]+[A-Za-z0-9]*|[0-9]*) [+\\-\\*\\/&%|^<>] (\\*?[A-Za-z]+[A-Za-z0-9]*|[0-9]*)").Value == Svalue) // základní aritmetika dvě
            {
                retValue = Arithmetic.basicOperations(Svalue, var);
            }
            else if (Regex.Match(Svalue, "[!] (\\*?[A-Za-z]+[A-Za-z0-9]*|[0-9]*)").Value == Svalue) // základní aritmetika jedna
            {
                retValue = Arithmetic.basicOperaticonsSingle(Svalue, var);
            }
            else if (Regex.Match(Svalue, "^\\*.*").Value == Svalue)//string
            {
                retValue = Svalue;
            }
            else if (Regex.Match(Svalue, "^(True|False)$").Value == Svalue) //bool
            {
                retValue = Svalue;
            }
            else if (Regex.Match(Svalue, "^[0-9]*$").Value == Svalue) //cisla
            {
                retValue = Svalue;
            }
            else if (Regex.Match(Svalue, "[A-Za-z]+[A-Za-z0-9]+\\(.*\\)").Value == Svalue) // metody
            {
                retValue = Methods.ResolveMethods(Svalue, var).ToString();
            }
            else if (var.ValueExists(Svalue))
            {
                retValue = var.GetValue(Svalue);
            }

            return(retValue);
        }