Esempio n. 1
0
        private static List <IExpression> ParseExpressionSequence(
            string[] expressionsString, ParserContext context,
            out SymbolType returnType, out SymbolType returnArrayType)
        {
            returnType      = SymbolType.Invalid;
            returnArrayType = SymbolType.Invalid;
            List <IExpression> expressions = new List <IExpression>();

            if (expressionsString.Length == 0)
            {
                returnType = SymbolType.Void;
                expressions.Add(new SymbolExpression <Void>(new VoidSymbol()));
                Debug.LogWarning("Executable.ParseExpressionSequence(...) : empty sequence.");
                return(expressions);
            }
            for (int i = 0; i < expressionsString.Length; i++)
            {
                string expressionString = expressionsString[i];
                if (expressionString == "")
                {
                    continue;
                }
                IExpression expression = Parser.ParseExpression(expressionString, context);
                if (expression == null)
                {
                    Debug.LogError("Executable.ParseExpressionSequence(...) : parsing error at " +
                                   $"line {i+1} \"{expressionString}\".");
                    return(null);
                }
                if (i == expressionsString.Length - 1)
                {
                    // last expression determines return Type
                    returnArrayType = expression.ArrayType();
                    returnType      = expressionString.EndsWith(";") ?
                                      SymbolType.Void : expression.Type();
                }
                expressions.Add(expression);
            }
            return(expressions);
        }