Пример #1
0
        private static void setNewExpectVariable(expectType expect, VariableTypes newType, int lineNumber)
        {
            if (expect.currentType == VariableTypes.unsigned)
            {
                expect.currentType = newType;
            }
            else if (expect.currentType != newType)
            {
                var firstSumType  = TypeToString(expect.currentType);
                var secondSumType = TypeToString(newType);

                string errorMessage;

                if (firstSumType == "" || secondSumType == "")
                {
                    errorMessage = "Misslyckades med att para ihop " + expect.currentType + " med " + newType;
                }
                else
                {
                    errorMessage = "Kan inte lägga ihop " + firstSumType + " med " + secondSumType + ".";
                }

                ErrorMessage.sendErrorMessage(lineNumber, errorMessage);
                expect.currentType = VariableTypes.unknown;
            }
        }
Пример #2
0
        private static void handleFunctionCall(Logic[] logicOrder, expectType theExpectedType, int lineNumber, Scope currentScope, int i)
        {
            FunctionParser.linkFunctionCall((logicOrder [i] as FunctionCall), lineNumber, currentScope);

            if ((logicOrder [i] as FunctionCall).targetFunc.isUserFunction)
            {
                currentScope.getCurrentLine().insertReturnExpect(logicOrder [i]);
                (logicOrder [i] as FunctionCall).runFunction(currentScope);

                throw new FunctionCallException();
            }
            else
            {
                if ((logicOrder [i] as FunctionCall).targetFunc.pauseWalker)
                {
                    CodeWalker.pauseWalker();
                }

                if ((logicOrder[i] as FunctionCall).targetFunc.name == "input")
                {
                    CodeWalker.linkSubmitInput.Invoke(SubmitInput, currentScope);

                    Variable returnVariable = (logicOrder[i] as FunctionCall).runFunction(currentScope);
                    logicOrder[i] = returnVariable;

                    if (returnVariable.variableType == VariableTypes.boolean)
                    {
                        setNewExpectVariable(theExpectedType, VariableTypes.boolean, lineNumber);
                    }
                    else if (returnVariable.variableType == VariableTypes.number)
                    {
                        setNewExpectVariable(theExpectedType, VariableTypes.number, lineNumber);
                    }
                    else if (returnVariable.variableType == VariableTypes.textString)
                    {
                        setNewExpectVariable(theExpectedType, VariableTypes.textString, lineNumber);
                    }

                    CodeWalker.isWaitingForUserInput = true;
                }
                else
                {
                    Variable returnVariable = (logicOrder[i] as FunctionCall).runFunction(currentScope);
                    logicOrder[i] = returnVariable;

                    if (returnVariable.variableType == VariableTypes.boolean)
                    {
                        setNewExpectVariable(theExpectedType, VariableTypes.boolean, lineNumber);
                    }
                    else if (returnVariable.variableType == VariableTypes.number)
                    {
                        setNewExpectVariable(theExpectedType, VariableTypes.number, lineNumber);
                    }
                    else if (returnVariable.variableType == VariableTypes.textString)
                    {
                        setNewExpectVariable(theExpectedType, VariableTypes.textString, lineNumber);
                    }
                }
            }
        }
Пример #3
0
        private static Variable getCalcSum(expectType theExpectedType, Logic[] logicOrder, int lineNumber)
        {
            if (theExpectedType.currentType == VariableTypes.boolean)
            {
                Variable sumVar = BooleanSumParser.validBoolSum(logicOrder, lineNumber);
                if (sumVar.variableType == VariableTypes.boolean)
                {
                    return(sumVar);
                }
            }

            if (theExpectedType.currentType == VariableTypes.textString)
            {
                Variable sumVar = TextSumParser.validTextSum(logicOrder, lineNumber);
                if (sumVar.variableType == VariableTypes.textString)
                {
                    return(sumVar);
                }
            }

            if (theExpectedType.currentType == VariableTypes.number)
            {
                Variable sumVar = NumberSumParser.validNumberSum(logicOrder, lineNumber);
                if (sumVar.variableType == VariableTypes.number)
                {
                    return(sumVar);
                }
            }

            return(new Variable("CalcVar"));
        }
Пример #4
0
        private static void handleVariable(Logic[] logicOrder, expectType theExpectedType, int lineNumber, Scope currentScope, int i)
        {
            int varPos = currentScope.scopeVariables.containsVariable((logicOrder [i] as Variable).name);

            if (varPos >= 0)
            {
                Variable foundVar = currentScope.scopeVariables.variableList [varPos];
                setNewExpectVariable(theExpectedType, foundVar.variableType, lineNumber);
                logicOrder [i] = foundVar;
            }
            else
            {
                if ((logicOrder [i] as Variable).isCalcVar)
                {
                    setNewExpectVariable(theExpectedType, (logicOrder [i] as Variable).variableType, lineNumber);
                }
                else
                {
                    if ((logicOrder [i] as Variable).name.Length > 10)
                    {
                        ErrorMessage.sendErrorMessage(lineNumber, "Användning av icke deklarerad variabel!");
                    }

                    LevenshteinDist.checkForClosesVariable(logicOrder [i].word, lineNumber, currentScope);
                    ErrorMessage.sendErrorMessage(lineNumber, "Kunde inte hitta variabeln \"" + (logicOrder [i] as Variable).name + "\" i minnet.");
                }
            }
        }
Пример #5
0
        static void setNewExpectVariable(expectType expect, VariableTypes newType, int lineNumber, Logic[] logicOrder)
        {
            if (expect.currentType == VariableTypes.unknown)
            {
                return;
            }

            if (expect.currentType == VariableTypes.unsigned)
            {
                expect.currentType = newType;
            }
            else if (expect.currentType != newType)
            {
                var firstSumType  = SumParser.TypeToString(expect.currentType);
                var secondSumType = SumParser.TypeToString(newType);

                string errorMessage;

                if (firstSumType == "" || secondSumType == "")
                {
                    errorMessage = "Misslyckades med att para ihop " + expect.currentType + " med " + newType;
                }
                else
                {
                    errorMessage = "Kan inte para ihop " + firstSumType + " med " + secondSumType + ".";
                }

                ErrorMessage.sendErrorMessage(lineNumber, errorMessage);
            }

            if (expect.currentType == VariableTypes.boolean)
            {
                BooleanSumParser.validBoolSum(logicOrder, lineNumber);
            }
        }
Пример #6
0
        public static Variable checkIfValidSum(Logic[] PrelogicOrder, int lineNumber)
        {
            Logic[] logicOrder = (Logic[])PrelogicOrder.Clone();
            UnpackPackages(logicOrder, lineNumber);

            logicOrder = BoolCompressExpressions.compressExpression(logicOrder, lineNumber, null, false);
            logicOrder = BoolExpressionParser.compressAndOrStatements(logicOrder, lineNumber, null);

            if (logicOrder.Length == 0)
            {
                return(new Variable("No var"));
            }

            expectType theExpectedType = new expectType();

            for (int i = 0; i < logicOrder.Length; i++)
            {
                if (logicOrder[i].currentType == WordTypes.booleanExpression)
                {
                    setNewExpectVariable(theExpectedType, VariableTypes.boolean, lineNumber, logicOrder);
                }

                else if (logicOrder [i].currentType == WordTypes.variable)
                {
                    logicOrder [i] = new Variable(logicOrder [i].word);
                }
                else if (logicOrder [i].currentType == WordTypes.mathOperator)
                {
                }
                else if (logicOrder [i].currentType == WordTypes.number)
                {
                    setNewExpectVariable(theExpectedType, VariableTypes.number, lineNumber, logicOrder);
                }
                else if (logicOrder [i].currentType == WordTypes.textString)
                {
                    setNewExpectVariable(theExpectedType, VariableTypes.textString, lineNumber, logicOrder);
                }
                else if (logicOrder [i].currentType == WordTypes.booleanValue)
                {
                    setNewExpectVariable(theExpectedType, VariableTypes.boolean, lineNumber, logicOrder);
                }
            }

            if (theExpectedType.currentType == VariableTypes.unknown)
            {
                return(new Variable());
            }

            return(theExpectedType.returnExpectedVariable());
        }
Пример #7
0
        public static Variable parseIntoSum(Logic[] logicOrderInput, int lineNumber, Scope currentScope)
        {
            Logic[] logicOrder = (Logic[])logicOrderInput.Clone();
            UnpackPackages(logicOrder, lineNumber, currentScope);

            logicOrder = BoolCompressExpressions.compressExpression(logicOrder, lineNumber, currentScope, true);
            logicOrder = BoolExpressionParser.compressAndOrStatements(logicOrder, lineNumber, currentScope);

            if (logicOrder.Length == 0)
            {
                return(new Variable("CalcVar"));
            }

            expectType theExpectedType = new expectType();

            calcSumType(logicOrder, theExpectedType, lineNumber, currentScope);
            return(getCalcSum(theExpectedType, logicOrder, lineNumber));
        }
Пример #8
0
        private static void calcSumType(Logic[] logicOrder, expectType theExpectedType, int lineNumber, Scope currentScope)
        {
            for (int i = 0; i < logicOrder.Length; i++)
            {
                switch (logicOrder [i].currentType)
                {
                    #region values
                case WordTypes.textString:
                    setNewExpectVariable(theExpectedType, VariableTypes.textString, lineNumber);
                    break;

                case WordTypes.number:
                    setNewExpectVariable(theExpectedType, VariableTypes.number, lineNumber);
                    break;

                case WordTypes.booleanValue:
                    setNewExpectVariable(theExpectedType, VariableTypes.boolean, lineNumber);
                    break;
                    #endregion

                // booleanExpressions are for example a expression used in an if-statement
                case WordTypes.booleanExpression:
                    logicOrder [i] = (logicOrder [i] as BooleanExpression).parseExpression();
                    setNewExpectVariable(theExpectedType, VariableTypes.boolean, lineNumber);
                    break;

                case WordTypes.variable:
                    handleVariable(logicOrder, theExpectedType, lineNumber, currentScope, i);
                    break;

                case WordTypes.functionCall:
                    handleFunctionCall(logicOrder, theExpectedType, lineNumber, currentScope, i);
                    break;
                }
            }
        }