示例#1
0
        private static object ToDouble(Argument[] argumenty)
        {
            object v = argumenty[0].Wykonaj();

            if (v is bool)
            {
                return((bool)v ? 1d : 0d);
            }
            if (v is int)
            {
                return((double)(int)v);
            }
            if (v is double)
            {
                return((double)v);
            }
            if (v is string)
            {
                double r1 = 0;
                if (Stala.IsDouble((string)v, out r1))
                {
                    return(r1);
                }
                int r2 = 0;
                if (Stala.IsInt((string)v, out r2))
                {
                    return((double)r2);
                }
            }
            throw new ExecutingScriptException(string.Format(UI.Language.Instance.GetString(UI.UIStrings.CannotConvertValueToType), v, v == null ? "(null)" : v.GetType().Name, "double"));
        }
示例#2
0
        private static object ToBool(Argument[] argumenty)
        {
            object v = argumenty[0].Wykonaj();

            if (v is bool)
            {
                return((bool)v);
            }
            if (v is int)
            {
                return((int)v != 0);
            }
            if (v is double)
            {
                return((double)v != 0d);
            }
            if (v is string)
            {
                bool r = false;
                if (Stala.IsBool((string)v, out r))
                {
                    return(r);
                }
            }
            throw new ExecutingScriptException(string.Format(UI.Language.Instance.GetString(UI.UIStrings.CannotConvertValueToType), v, v == null ? "(null)" : v.GetType().Name, "bool"));
        }
示例#3
0
        public new static Stala Parsuj(ITokenizer tokenizer)
        {
            Stala     stala = new Stala();
            HCPSToken token = tokenizer.Next();

            if (token == HCPSToken.Variable)
            {
                stala.Nazwa = tokenizer.Value;
                if (tokenizer.Next() == HCPSToken.BlockBegin)
                {
                    while ((token = tokenizer.Next()) != HCPSToken.BlockEnd)
                    {
                        SimpleAssignment sa = tokenizer.ReadSimpleAssignment(token, tokenizer.Value);
                        if (sa == null || sa.Left == null || sa.Right == null)
                        {
                            throw new ParsingScriptException(string.Format(UI.Language.Instance.GetString(UI.UIStrings.IncorrectConstantDefinition), stala.Nazwa));
                        }
                        switch (sa.Left.ToLowerInvariant())
                        {
                        case "type":
                            stala.Typ = Utils.VariableTypeFromString(sa.Right);
                            switch (stala.Typ)
                            {
                            case HomeSimCockpitSDK.VariableType.Bool:
                            case HomeSimCockpitSDK.VariableType.Int:
                            case HomeSimCockpitSDK.VariableType.Double:
                            case HomeSimCockpitSDK.VariableType.String:
                                break;

                            default:
                                throw new ParsingScriptException(string.Format(UI.Language.Instance.GetString(UI.UIStrings.InvalidConstantType), Utils.VariableTypeToString(stala.Typ), stala.Nazwa));
                            }
                            break;

                        case "value":
                            stala._Wartosc = sa.Right;
                            break;

                        default:
                            throw new ParsingScriptException(string.Format(UI.Language.Instance.GetString(UI.UIStrings.InvalidConstantDefinitionProperty), sa.Left, stala.Nazwa, tokenizer.GetPosition(tokenizer.Position)));
                        }
                    }
                    stala.Check();
                    return(stala);
                }
            }
            throw new ParsingScriptException(string.Format(UI.Language.Instance.GetString(UI.UIStrings.CannotParseConstantDefinition), tokenizer.GetPosition(tokenizer.Position)));
        }
示例#4
0
 public override void Check()
 {
     base.Check();
     if (_Wartosc == null)
     {
         throw new CheckingScriptException(string.Format(UI.Language.Instance.GetString(UI.UIStrings.MissingConstantValue), Nazwa));
     }
     else
     {
         if (Typ == HomeSimCockpitSDK.VariableType.Double)
         {
             double d = 0;
             if (!Stala.IsDouble((string)_Wartosc, out d))
             {
                 throw new CheckingScriptException(string.Format(UI.Language.Instance.GetString(UI.UIStrings.IncorrectNumberFormatTypeDoubleForConstantInitialization), (string)_Wartosc, Nazwa));
             }
             _Wartosc = d;
         }
         else if (Typ == HomeSimCockpitSDK.VariableType.Int)
         {
             int i = 0;
             if (!Stala.IsInt((string)_Wartosc, out i))
             {
                 throw new CheckingScriptException(string.Format(UI.Language.Instance.GetString(UI.UIStrings.IncorrectNumberFormatTypeIntForConstantInitialization), (string)_Wartosc, Nazwa));
             }
             _Wartosc = i;
         }
         else
         {
             try
             {
                 _Wartosc = Utils.Parse(_Wartosc, Typ);
             }
             catch (Exception ex)
             {
                 throw new CheckingScriptException(string.Format(UI.Language.Instance.GetString(UI.UIStrings.InvalidConstantValueType), Nazwa), ex);
             }
         }
     }
 }
示例#5
0
        private static void DodajStala(HCPSTokenizer tokenizer, List <Stala> stale, Stala stala)
        {
            Stala s = stale.Find(delegate(Stala o)
            {
                return(o.Nazwa == stala.Nazwa);
            });

            if (s != null && s.Typ != stala.Typ)
            {
                if (tokenizer == null)
                {
                    throw new ParsingScriptException(string.Format(UI.Language.Instance.GetString(UI.UIStrings.ConstantRedefinition), stala.Nazwa));
                }
                else
                {
                    throw new ParsingScriptException(string.Format(UI.Language.Instance.GetString(UI.UIStrings.ConstantRedefinition2), stala.Nazwa, tokenizer.GetPosition(tokenizer.Position)));
                }
            }
            if (s == null)
            {
                stale.Add(stala);
            }
        }
示例#6
0
        private static Skrypt[] ParsujHCPS(string nazwaPliku, IProgress progress, List <string> included, Dictionary <string, Skrypt[]> scripts, bool bindObjects)
        {
            string fileNameLower = nazwaPliku.ToLowerInvariant();

            if (included.Contains(fileNameLower))
            {
                if (scripts.ContainsKey(fileNameLower))
                {
                    return(scripts[fileNameLower]);
                }
            }
            else
            {
                included.Add(fileNameLower);
            }
            List <Skrypt> result = new List <Skrypt>();
            string        info   = string.Format(UI.Language.Instance.GetString(UI.UIStrings.LoadingFile), nazwaPliku);

            progress.Progress(info, "");

            // utworzenie tokenizera
            HCPSTokenizer tokenizer = new HCPSTokenizer(nazwaPliku);
            HCPSToken     token     = HCPSToken.Unknown;

            while ((token = tokenizer.Next()) != HCPSToken.EOF)
            {
                while (token == HCPSToken.Comment)
                {
                    token = tokenizer.Next();
                }
                if (token == HCPSToken.EOF)
                {
                    break;
                }
                if (token == HCPSToken.Word && tokenizer.Value.ToLowerInvariant() == "script")
                {
                    // chyba mamy skrypt
                    token = tokenizer.Next();
                    if (token == HCPSToken.String)
                    {
                        // nazwa slryptu

                        // sprawdzenie czy skrytp o takiej nazwie nie istnieje
                        Skrypt skrypt = result.Find(delegate(Skrypt o)
                        {
                            return(o.Nazwa == tokenizer.Value);
                        });

                        if (skrypt != null)
                        {
                            throw new ParsingScriptException(string.Format(UI.Language.Instance.GetString(UI.UIStrings.ScriptAlreadyExists), tokenizer.Value));
                        }
                        skrypt       = new Skrypt();
                        skrypt.Nazwa = tokenizer.Value;
                        ZbiorWartosci2 slownik = null;

                        progress.Progress(info, string.Format(UI.Language.Instance.GetString(UI.UIStrings.LoadingScript), skrypt.Nazwa));

                        token = tokenizer.Next();
                        if (token == HCPSToken.BlockBegin)
                        {
                            // rozpoczęcie bloku

                            // odczytywanie po kolei co jest
                            List <Zmienna>          zmienne   = new List <Zmienna>();
                            List <Stala>            stale     = new List <Stala>();
                            List <DefinicjaFunkcji> funkcje   = new List <DefinicjaFunkcji>();
                            List <Zdarzenie>        zdarzenia = new List <Zdarzenie>();
                            List <IncludeStatement> includes  = new List <IncludeStatement>();

                            while ((token = tokenizer.Next()) != HCPSToken.BlockEnd)
                            {
                                if (token == HCPSToken.Word)
                                {
                                    if (progress.Cancel)
                                    {
                                        throw new ParsingScriptException(UI.Language.Instance.GetString(UI.UIStrings.LoadingScriptsFileCanceledByUser));
                                    }

                                    switch (tokenizer.Value.ToLowerInvariant())
                                    {
                                    case "variable":
                                        // odczytanie zmiennej
                                        Zmienna zmienna = Zmienna.Parsuj(tokenizer);
                                        DodajZmienna(tokenizer, zmienne, zmienna);
                                        break;

                                    case "const":
                                        // odczytanie stałej
                                        Stala stala = Stala.Parsuj(tokenizer);
                                        DodajStala(tokenizer, stale, stala);
                                        break;

                                    case "initialize":
                                        // funkcja inicjalizująca
                                        if (skrypt.Initialize != null)
                                        {
                                            throw new ParsingScriptException(string.Format(UI.Language.Instance.GetString(UI.UIStrings.SpecialEventRedefinition), tokenizer.GetPosition(tokenizer.Position), "initialize"));
                                        }
                                        if (tokenizer.Next() != HCPSToken.BlockBegin)
                                        {
                                            throw new ParsingScriptException(string.Format(UI.Language.Instance.GetString(UI.UIStrings.IncorrectSpecialEventDefinition), tokenizer.GetPosition(tokenizer.Position), "initialize"));
                                        }
                                        skrypt.Initialize = Akcje.Parsuj(tokenizer);
                                        break;

                                    case "output_started":
                                        if (skrypt.OutputStarted != null)
                                        {
                                            throw new ParsingScriptException(string.Format(UI.Language.Instance.GetString(UI.UIStrings.SpecialEventRedefinition), tokenizer.GetPosition(tokenizer.Position), "output_started"));
                                        }
                                        if (tokenizer.Next() != HCPSToken.BlockBegin)
                                        {
                                            throw new ParsingScriptException(string.Format(UI.Language.Instance.GetString(UI.UIStrings.IncorrectSpecialEventDefinition), tokenizer.GetPosition(tokenizer.Position), "output_started"));
                                        }
                                        skrypt.OutputStarted = Akcje.Parsuj(tokenizer);
                                        break;

                                    case "output_stopped":
                                        if (skrypt.OutputStopped != null)
                                        {
                                            throw new ParsingScriptException(string.Format(UI.Language.Instance.GetString(UI.UIStrings.SpecialEventRedefinition), tokenizer.GetPosition(tokenizer.Position), "output_stopped"));
                                        }
                                        if (tokenizer.Next() != HCPSToken.BlockBegin)
                                        {
                                            throw new ParsingScriptException(string.Format(UI.Language.Instance.GetString(UI.UIStrings.IncorrectSpecialEventDefinition), tokenizer.GetPosition(tokenizer.Position), "output_stopped"));
                                        }
                                        skrypt.OutputStopped = Akcje.Parsuj(tokenizer);
                                        break;

                                    case "input_started":
                                        if (skrypt.InputStarted != null)
                                        {
                                            throw new ParsingScriptException(string.Format(UI.Language.Instance.GetString(UI.UIStrings.SpecialEventRedefinition), tokenizer.GetPosition(tokenizer.Position), "input_started"));
                                        }
                                        if (tokenizer.Next() != HCPSToken.BlockBegin)
                                        {
                                            throw new ParsingScriptException(string.Format(UI.Language.Instance.GetString(UI.UIStrings.IncorrectSpecialEventDefinition), tokenizer.GetPosition(tokenizer.Position), "input_started"));
                                        }
                                        skrypt.InputStarted = Akcje.Parsuj(tokenizer);
                                        break;

                                    case "input_stopped":
                                        if (skrypt.InputStopped != null)
                                        {
                                            throw new ParsingScriptException(string.Format(UI.Language.Instance.GetString(UI.UIStrings.SpecialEventRedefinition), tokenizer.GetPosition(tokenizer.Position), "input_stopped"));
                                        }
                                        if (tokenizer.Next() != HCPSToken.BlockBegin)
                                        {
                                            throw new ParsingScriptException(string.Format(UI.Language.Instance.GetString(UI.UIStrings.IncorrectSpecialEventDefinition), tokenizer.GetPosition(tokenizer.Position), "input_stopped"));
                                        }
                                        skrypt.InputStopped = Akcje.Parsuj(tokenizer);
                                        break;

                                    case "uninitialize":
                                        if (skrypt.Uninitialize != null)
                                        {
                                            throw new ParsingScriptException(string.Format(UI.Language.Instance.GetString(UI.UIStrings.SpecialEventRedefinition), tokenizer.GetPosition(tokenizer.Position), "uninitialize"));
                                        }
                                        if (tokenizer.Next() != HCPSToken.BlockBegin)
                                        {
                                            throw new ParsingScriptException(string.Format(UI.Language.Instance.GetString(UI.UIStrings.IncorrectSpecialEventDefinition), tokenizer.GetPosition(tokenizer.Position), "uninitialize"));
                                        }
                                        skrypt.Uninitialize = Akcje.Parsuj(tokenizer);
                                        break;

                                    case "variable_changed":
                                        // zdarzenie zmiany wartości zmiennej
                                        ZmianaZmiennej zmianaZmiennej = ZmianaZmiennej.Parsuj(tokenizer);
                                        DodajZdarzenieZmiennej(tokenizer, zdarzenia, zmianaZmiennej);
                                        break;

                                    case "variables_changed":
                                        // zdarzenie zmiany wielu zmiennych
                                        ZmianaZmiennych zmianaZmiennych = ZmianaZmiennych.Parsuj(tokenizer);
                                        DodajZdarzenieZmiennych(tokenizer, zdarzenia, zmianaZmiennych);
                                        break;

                                    case "function":
                                        // funkcja
                                        DefinicjaFunkcji funkcja = DefinicjaFunkcji.Parsuj(tokenizer);
                                        DodajFunkcje(tokenizer, funkcje, funkcja);
                                        break;

                                    case "include":
                                        IncludeStatement include  = IncludeStatement.Parsuj(tokenizer);
                                        IncludeStatement includeF = includes.Find(delegate(IncludeStatement o)
                                        {
                                            return(o.FilePath.ToLowerInvariant() == include.FilePath.ToLowerInvariant() && o.ScriptName == include.ScriptName);
                                        });
                                        if (includeF != null)
                                        {
                                            throw new Exception();
                                        }
                                        includes.Add(include);
                                        break;

                                    default:
                                        throw new ParsingScriptException(string.Format(UI.Language.Instance.GetString(UI.UIStrings.UnsuportedDefinitionType), tokenizer.Value, tokenizer.GetPosition(tokenizer.Position)));
                                    }
                                }
                                else
                                {
                                    if (token != HCPSToken.Comment)
                                    {
                                        throw new ParsingScriptException(string.Format(UI.Language.Instance.GetString(UI.UIStrings.ScriptSyntaxError), tokenizer.GetPosition(tokenizer.Position)));
                                    }
                                }
                            }

                            // TODO obsługa dyrektyw include
                            if (includes.Count > 0)
                            {
                                foreach (IncludeStatement inc in includes)
                                {
                                    string includeFileName = inc.FilePath.ToLowerInvariant();
                                    if (included.Contains(includeFileName))
                                    {
                                        continue;
                                    }
                                    if (includeFileName == fileNameLower)
                                    {
                                        throw new ParsingScriptException(string.Format(UI.Language.Instance.GetString(UI.UIStrings.CannotJoinScriptsFromOneFile)));
                                    }

                                    if (!Path.IsPathRooted(inc.FilePath))
                                    {
                                        string dir = nazwaPliku.Substring(0, nazwaPliku.Length - Path.GetFileName(nazwaPliku).Length);
                                        inc.FilePath = Path.Combine(dir, inc.FilePath);
                                    }

                                    Skrypt[] skrypty   = ParsujHCPS(inc.FilePath, progress, included, scripts, false);
                                    Skrypt   skryptInc = Array.Find <Skrypt>(skrypty, delegate(Skrypt o)
                                    {
                                        return(o.Nazwa.ToLowerInvariant() == inc.ScriptName.ToLowerInvariant());
                                    });
                                    if (skryptInc != null)
                                    {
                                        skrypt.Initialize    = PolaczAkcje(skrypt.Initialize, skryptInc.Initialize);
                                        skrypt.OutputStarted = PolaczAkcje(skrypt.OutputStarted, skryptInc.OutputStarted);
                                        skrypt.OutputStopped = PolaczAkcje(skrypt.OutputStopped, skryptInc.OutputStopped);
                                        skrypt.InputStarted  = PolaczAkcje(skrypt.InputStarted, skryptInc.InputStarted);
                                        skrypt.InputStopped  = PolaczAkcje(skrypt.InputStopped, skryptInc.InputStopped);
                                        for (int i = 0; i < skryptInc.Zmienne.Length; i++)
                                        {
                                            DodajZmienna(null, zmienne, skryptInc.Zmienne[i]);
                                        }
                                        for (int i = 0; i < skryptInc.Stale.Length; i++)
                                        {
                                            DodajStala(null, stale, skryptInc.Stale[i]);
                                        }
                                        for (int i = 0; i < skryptInc.Funkcje.Length; i++)
                                        {
                                            DodajFunkcje(null, funkcje, skryptInc.Funkcje[i]);
                                        }
                                        for (int i = 0; i < skryptInc.Zdarzenia.Length; i++)
                                        {
                                            DodajZdarzenie(null, zdarzenia, skryptInc.Zdarzenia[i]);
                                        }
                                    }
                                    else
                                    {
                                        throw new ParsingScriptException(string.Format(UI.Language.Instance.GetString(UI.UIStrings.ScriptNotFoundInFile), inc.FilePath, inc.ScriptName));
                                    }
                                }
                            }

                            slownik          = new ZbiorWartosci2(zmienne, stale, funkcje);
                            skrypt.Zmienne   = zmienne.ToArray();
                            skrypt.Stale     = stale.ToArray();
                            skrypt.Funkcje   = funkcje.ToArray();
                            skrypt.Zdarzenia = zdarzenia.ToArray();
                        }
                        else
                        {
                            throw new ParsingScriptException(string.Format(UI.Language.Instance.GetString(UI.UIStrings.ScriptSyntaxError), tokenizer.GetPosition(tokenizer.Position)));
                        }

                        // przepisanie referencji zmiennych, stałych i funkcji
                        if (bindObjects)
                        {
                            skrypt.PrzypiszReferencje(slownik);
                        }
                        result.Add(skrypt);
                    }
                    else
                    {
                        throw new ParsingScriptException(string.Format(UI.Language.Instance.GetString(UI.UIStrings.ScriptSyntaxError), tokenizer.GetPosition(tokenizer.Position)));
                    }
                }
                else
                {
                    throw new ParsingScriptException(string.Format(UI.Language.Instance.GetString(UI.UIStrings.UnrecognizedString), tokenizer.Value, tokenizer.GetPosition(tokenizer.Position)));
                }
            }
            result.Sort();
            return(result.ToArray());
        }
示例#7
0
        public override void Check()
        {
            base.Check();
            if (Kierunek == KierunekZmiennej.Unknown)
            {
                throw new CheckingScriptException(string.Format(UI.Language.Instance.GetString(UI.UIStrings.UndefinedVariableDirection), Nazwa));
            }
            switch (Typ)
            {
            case HomeSimCockpitSDK.VariableType.Bool:
                if (_Wartosc == null)
                {
                    _Wartosc = _WartoscPoczatkowa = false;
                }
                else
                {
                    _Wartosc = _WartoscPoczatkowa = Utils.Parse(_Wartosc, Typ);
                }
                break;

            case HomeSimCockpitSDK.VariableType.Int:
                if (_Wartosc == null)
                {
                    _Wartosc = _WartoscPoczatkowa = 0;
                }
                else
                {
                    int i = 0;
                    if (!Stala.IsInt((string)_Wartosc, out i))
                    {
                        throw new CheckingScriptException(string.Format(UI.Language.Instance.GetString(UI.UIStrings.IncorrectNumberFormatTypeIntForVariableInitialization), (string)_Wartosc, Nazwa));
                    }
                    _Wartosc = _WartoscPoczatkowa = i;
                }
                break;

            case HomeSimCockpitSDK.VariableType.Double:
                if (_Wartosc == null)
                {
                    _Wartosc = _WartoscPoczatkowa = 0d;
                }
                else
                {
                    double d = 0;
                    if (!Stala.IsDouble((string)_Wartosc, out d))
                    {
                        throw new CheckingScriptException(string.Format(UI.Language.Instance.GetString(UI.UIStrings.IncorrectNumberFormatTypeDoubleForVariableInitialization), (string)_Wartosc, Nazwa));
                    }
                    _Wartosc = _WartoscPoczatkowa = d;
                }
                break;

            case HomeSimCockpitSDK.VariableType.String:
                if (_Wartosc == null)
                {
                    _Wartosc = _WartoscPoczatkowa = "";
                }
                else
                {
                    _Wartosc = _WartoscPoczatkowa = Utils.Parse(_Wartosc, Typ);
                }
                break;

            case HomeSimCockpitSDK.VariableType.Bool_Array:
            case HomeSimCockpitSDK.VariableType.Int_Array:
            case HomeSimCockpitSDK.VariableType.Double_Array:
            case HomeSimCockpitSDK.VariableType.String_Array:
            case HomeSimCockpitSDK.VariableType.Array:
                if (_Wartosc == null)
                {
                    _Wartosc = _WartoscPoczatkowa = null;
                }
                else
                {
                    throw new CheckingScriptException(string.Format(UI.Language.Instance.GetString(UI.UIStrings.CannotInitailizeVariableOfType), Nazwa, Utils.VariableTypeToString(Typ)));
                }
                break;
            }
        }
示例#8
0
        public new static Wyrazenie Parsuj(ITokenizer tokenizer)
        {
            long      position = tokenizer.Position;
            HCPSToken token    = tokenizer.Next();

            while (token == HCPSToken.Comment)
            {
                position = tokenizer.Position;
                token    = tokenizer.Next();
            }
            switch (token)
            {
            case HCPSToken.Word:
            {
                switch (tokenizer.Value)
                {
                case "if":
                    return(Warunek.Parsuj(tokenizer));

                case "null":
                {
                    Stala stala = new Stala()
                    {
                        _Wartosc = null
                    };
                    token = tokenizer.Next();
                    switch (token)
                    {
                    case HCPSToken.Bigger:
                    case HCPSToken.BiggerOrEqual:
                    case HCPSToken.Equal:
                    case HCPSToken.NotEqual:
                    case HCPSToken.Smaller:
                    case HCPSToken.SmallerOrEqual:
                    {
                        switch (token)
                        {
                        case HCPSToken.Bigger:
                        case HCPSToken.BiggerOrEqual:
                        case HCPSToken.Equal:
                        case HCPSToken.NotEqual:
                        case HCPSToken.Smaller:
                        case HCPSToken.SmallerOrEqual:
                            Jezeli jezeli = new Jezeli();
                            jezeli.WyrazenieLewe   = stala;
                            jezeli.WarunekLogiczny = new WarunekLogiczny()
                            {
                                Typ = WarunekLogiczny.TokenNaWarunek(token)
                            };
                            jezeli.WyrazeniePrawe = Wyrazenie.Parsuj(tokenizer);
                            return(jezeli);

                        default:
                            tokenizer.Back();
                            break;
                        }

                        tokenizer.Back();
                        return(stala);
                    }

                    case HCPSToken.InstructionEnd:
                    case HCPSToken.ParenthesisClose:
                    case HCPSToken.CommaSeparator:
                    {
                        tokenizer.Back();
                        break;
                    }
                    }
                    return(stala);
                }

                case "return":
                {
                    Return r = new Return();
                    r.Wyrazenie = Wyrazenie.Parsuj(tokenizer);
                    return(r);
                }

                default:
                {
                    string wartosc = tokenizer.Value;
                    token = tokenizer.Next();
                    if (token == HCPSToken.Colon)
                    {
                        token = tokenizer.Next();
                        if (token != HCPSToken.Word)
                        {
                            throw new ParsingScriptException(string.Format(UI.Language.Instance.GetString(UI.UIStrings.InvalidTokenAfterModuleName), token, wartosc));
                        }
                        tokenizer.Position = position;
                        FunkcjaModulu funkcjaModulu = FunkcjaModulu.Parsuj(tokenizer);
                        token = tokenizer.Next();
                        switch (token)
                        {
                        case HCPSToken.Assignment:
                        {
                            throw new ParsingScriptException(UI.Language.Instance.GetString(UI.UIStrings.OperationNotAllowed));
                        }

                        case HCPSToken.InstructionEnd:
                        case HCPSToken.ParenthesisClose:
                        case HCPSToken.CommaSeparator:
                        {
                            tokenizer.Back();
                            return(funkcjaModulu);
                        }

                        case HCPSToken.Addition:
                        case HCPSToken.Division:
                        case HCPSToken.Multiplication:
                        case HCPSToken.Subtraction:
                        case HCPSToken.And:
                        case HCPSToken.Or:
                        case HCPSToken.Modulo:
                        {
                            Wyrazenie w = Wyrazenie.Parsuj(tokenizer);
                            if (w is Operacja)
                            {
                                Wyrazenie w1 = ((Operacja)w).OperandLewy;
                                ((Operacja)w).OperandLewy = new Operacja()
                                {
                                    OperandLewy  = funkcjaModulu,
                                    OperandPrawy = w1,
                                    Operator     = Operacja.TokenNaOperator(token)
                                };
                                return(w);
                            }
                            else
                            {
                                Operacja operacja = new Operacja()
                                {
                                    OperandLewy  = funkcjaModulu,
                                    OperandPrawy = w,
                                    Operator     = Operacja.TokenNaOperator(token)
                                };
                                return(operacja);
                            }
                        }

                        case HCPSToken.Bigger:
                        case HCPSToken.BiggerOrEqual:
                        case HCPSToken.Equal:
                        case HCPSToken.NotEqual:
                        case HCPSToken.Smaller:
                        case HCPSToken.SmallerOrEqual:
                        {
                            switch (token)
                            {
                            case HCPSToken.Bigger:
                            case HCPSToken.BiggerOrEqual:
                            case HCPSToken.Equal:
                            case HCPSToken.NotEqual:
                            case HCPSToken.Smaller:
                            case HCPSToken.SmallerOrEqual:
                                Jezeli jezeli = new Jezeli();
                                jezeli.WyrazenieLewe   = funkcjaModulu;
                                jezeli.WarunekLogiczny = new WarunekLogiczny()
                                {
                                    Typ = WarunekLogiczny.TokenNaWarunek(token)
                                };
                                jezeli.WyrazeniePrawe = Wyrazenie.Parsuj(tokenizer);
                                return(jezeli);

                            default:
                                tokenizer.Back();
                                break;
                            }

                            tokenizer.Back();
                            return(funkcjaModulu);
                        }
                        }

                        return(funkcjaModulu);
                    }
                    else
                    if (token == HCPSToken.ParenthesisOpen)
                    {
                        // jakaś funkcja
                        tokenizer.Position = position;
                        Funkcja funkcja = Funkcja.Parsuj(tokenizer);

                        token = tokenizer.Next();
                        switch (token)
                        {
                        case HCPSToken.Assignment:
                        {
                            throw new ParsingScriptException(UI.Language.Instance.GetString(UI.UIStrings.OperationNotAllowed));
                        }

                        case HCPSToken.InstructionEnd:
                        case HCPSToken.ParenthesisClose:
                        case HCPSToken.CommaSeparator:
                        {
                            tokenizer.Back();
                            return(funkcja);
                        }

                        case HCPSToken.Addition:
                        case HCPSToken.Division:
                        case HCPSToken.Multiplication:
                        case HCPSToken.Subtraction:
                        case HCPSToken.And:
                        case HCPSToken.Or:
                        case HCPSToken.Modulo:
                        {
                            Wyrazenie w = Wyrazenie.Parsuj(tokenizer);
                            if (w is Operacja)
                            {
                                Wyrazenie w1 = ((Operacja)w).OperandLewy;
                                ((Operacja)w).OperandLewy = new Operacja()
                                {
                                    OperandLewy  = funkcja,
                                    OperandPrawy = w1,
                                    Operator     = Operacja.TokenNaOperator(token)
                                };
                                return(w);
                            }
                            else
                            {
                                Operacja operacja = new Operacja()
                                {
                                    OperandLewy  = funkcja,
                                    OperandPrawy = w,
                                    Operator     = Operacja.TokenNaOperator(token)
                                };
                                return(operacja);
                            }
                        }

                        case HCPSToken.Bigger:
                        case HCPSToken.BiggerOrEqual:
                        case HCPSToken.Equal:
                        case HCPSToken.NotEqual:
                        case HCPSToken.Smaller:
                        case HCPSToken.SmallerOrEqual:
                        {
                            switch (token)
                            {
                            case HCPSToken.Bigger:
                            case HCPSToken.BiggerOrEqual:
                            case HCPSToken.Equal:
                            case HCPSToken.NotEqual:
                            case HCPSToken.Smaller:
                            case HCPSToken.SmallerOrEqual:
                                Jezeli jezeli = new Jezeli();
                                jezeli.WyrazenieLewe   = funkcja;
                                jezeli.WarunekLogiczny = new WarunekLogiczny()
                                {
                                    Typ = WarunekLogiczny.TokenNaWarunek(token)
                                };
                                jezeli.WyrazeniePrawe = Wyrazenie.Parsuj(tokenizer);
                                return(jezeli);

                            default:
                                tokenizer.Back();
                                break;
                            }

                            tokenizer.Back();
                            return(funkcja);
                        }
                        }

                        return(funkcja);
                    }
                    else
                    {
                        tokenizer.Back();
                    }

                    Stala stala = null;

                    bool vb = false;

                    if (Stala.IsBool(wartosc, out vb))
                    {
                        stala = new Stala()
                        {
                            _Wartosc = vb,
                            Typ      = HomeSimCockpitSDK.VariableType.Bool
                        };
                    }

                    if (stala != null)
                    {
                        token = tokenizer.Next();
                        switch (token)
                        {
                        case HCPSToken.Assignment:
                        {
                            throw new ParsingScriptException(UI.Language.Instance.GetString(UI.UIStrings.OperationNotAllowed));
                        }

                        case HCPSToken.InstructionEnd:
                        case HCPSToken.ParenthesisClose:
                        case HCPSToken.CommaSeparator:
                        {
                            tokenizer.Back();
                            return(stala);
                        }

                        case HCPSToken.Addition:
                        case HCPSToken.Division:
                        case HCPSToken.Multiplication:
                        case HCPSToken.Subtraction:
                        case HCPSToken.And:
                        case HCPSToken.Or:
                        case HCPSToken.Modulo:
                        {
                            Wyrazenie w = Wyrazenie.Parsuj(tokenizer);
                            if (w is Operacja)
                            {
                                Wyrazenie w1 = ((Operacja)w).OperandLewy;
                                ((Operacja)w).OperandLewy = new Operacja()
                                {
                                    OperandLewy  = stala,
                                    OperandPrawy = w1,
                                    Operator     = Operacja.TokenNaOperator(token)
                                };
                                return(w);
                            }
                            else
                            {
                                Operacja operacja = new Operacja()
                                {
                                    OperandLewy  = stala,
                                    OperandPrawy = w,
                                    Operator     = Operacja.TokenNaOperator(token)
                                };
                                return(operacja);
                            }
                        }

                        case HCPSToken.Bigger:
                        case HCPSToken.BiggerOrEqual:
                        case HCPSToken.Equal:
                        case HCPSToken.NotEqual:
                        case HCPSToken.Smaller:
                        case HCPSToken.SmallerOrEqual:
                        {
                            switch (token)
                            {
                            case HCPSToken.Bigger:
                            case HCPSToken.BiggerOrEqual:
                            case HCPSToken.Equal:
                            case HCPSToken.NotEqual:
                            case HCPSToken.Smaller:
                            case HCPSToken.SmallerOrEqual:
                                Jezeli jezeli = new Jezeli();
                                jezeli.WyrazenieLewe   = stala;
                                jezeli.WarunekLogiczny = new WarunekLogiczny()
                                {
                                    Typ = WarunekLogiczny.TokenNaWarunek(token)
                                };
                                jezeli.WyrazeniePrawe = Wyrazenie.Parsuj(tokenizer);
                                return(jezeli);

                            default:
                                tokenizer.Back();
                                break;
                            }

                            tokenizer.Back();
                            return(stala);
                        }
                        }
                    }

                    break;
                }
                }
                break;
            }

            case HCPSToken.Number:
            {
                Stala  stala = null;
                double vd    = 0;
                int    vi    = 0;

                // sprawdzenie czy to liczba double
                if (Stala.IsDouble(tokenizer.Value, out vd))
                {
                    stala = new Stala()
                    {
                        _Wartosc = vd,
                        Typ      = HomeSimCockpitSDK.VariableType.Double
                    };
                }
                // sprawdzenie czy to liczba int
                else if (Stala.IsInt(tokenizer.Value, out vi))
                {
                    stala = new Stala()
                    {
                        _Wartosc = vi,
                        Typ      = HomeSimCockpitSDK.VariableType.Int
                    };
                }

                if (stala != null)
                {
                    token = tokenizer.Next();
                    switch (token)
                    {
                    case HCPSToken.Assignment:
                    {
                        throw new ParsingScriptException(UI.Language.Instance.GetString(UI.UIStrings.OperationNotAllowed));
                    }

                    case HCPSToken.InstructionEnd:
                    case HCPSToken.ParenthesisClose:
                    case HCPSToken.CommaSeparator:
                    {
                        tokenizer.Back();
                        return(stala);
                    }

                    case HCPSToken.Addition:
                    case HCPSToken.Division:
                    case HCPSToken.Multiplication:
                    case HCPSToken.Subtraction:
                    case HCPSToken.And:
                    case HCPSToken.Or:
                    case HCPSToken.Modulo:
                    {
                        Wyrazenie w = Wyrazenie.Parsuj(tokenizer);
                        if (w is Operacja)
                        {
                            Wyrazenie w1 = ((Operacja)w).OperandLewy;
                            OperatorDwuargumentowyTyp oper = Operacja.TokenNaOperator(token);
                            Operacja oo = new Operacja()
                            {
                                OperandLewy  = stala,
                                OperandPrawy = w,
                                Operator     = oper
                            };
                            return(oo);
                        }
                        else
                        {
                            Operacja operacja = new Operacja()
                            {
                                OperandLewy  = stala,
                                OperandPrawy = w,
                                Operator     = Operacja.TokenNaOperator(token)
                            };
                            return(operacja);
                        }
                    }

                    case HCPSToken.Bigger:
                    case HCPSToken.BiggerOrEqual:
                    case HCPSToken.Equal:
                    case HCPSToken.NotEqual:
                    case HCPSToken.Smaller:
                    case HCPSToken.SmallerOrEqual:
                    {
                        switch (token)
                        {
                        case HCPSToken.Bigger:
                        case HCPSToken.BiggerOrEqual:
                        case HCPSToken.Equal:
                        case HCPSToken.NotEqual:
                        case HCPSToken.Smaller:
                        case HCPSToken.SmallerOrEqual:
                            Jezeli jezeli = new Jezeli();
                            jezeli.WyrazenieLewe   = stala;
                            jezeli.WarunekLogiczny = new WarunekLogiczny()
                            {
                                Typ = WarunekLogiczny.TokenNaWarunek(token)
                            };
                            jezeli.WyrazeniePrawe = Wyrazenie.Parsuj(tokenizer);
                            return(jezeli);

                        default:
                            tokenizer.Back();
                            break;
                        }

                        tokenizer.Back();
                        return(stala);
                    }
                    }
                }

                break;
            }

            case HCPSToken.String:
                Stala ss = new Stala()
                {
                    _Wartosc = tokenizer.Value,
                    Typ      = HomeSimCockpitSDK.VariableType.String
                };

                token = tokenizer.Next();
                switch (token)
                {
                case HCPSToken.InstructionEnd:
                case HCPSToken.ParenthesisClose:
                case HCPSToken.CommaSeparator:
                {
                    tokenizer.Back();
                    return(ss);
                }

                case HCPSToken.Addition:
                {
                    Wyrazenie w = Wyrazenie.Parsuj(tokenizer);
                    if (w is Operacja)
                    {
                        Wyrazenie w1 = ((Operacja)w).OperandLewy;
                        ((Operacja)w).OperandLewy = new Operacja()
                        {
                            OperandLewy  = ss,
                            OperandPrawy = w1,
                            Operator     = Operacja.TokenNaOperator(token)
                        };
                        return(w);
                    }
                    else
                    {
                        Operacja operacja = new Operacja()
                        {
                            OperandLewy  = ss,
                            OperandPrawy = w,
                            Operator     = Operacja.TokenNaOperator(token)
                        };
                        return(operacja);
                    }
                }

                case HCPSToken.Bigger:
                case HCPSToken.BiggerOrEqual:
                case HCPSToken.Equal:
                case HCPSToken.NotEqual:
                case HCPSToken.Smaller:
                case HCPSToken.SmallerOrEqual:
                {
                    switch (token)
                    {
                    case HCPSToken.Bigger:
                    case HCPSToken.BiggerOrEqual:
                    case HCPSToken.Equal:
                    case HCPSToken.NotEqual:
                    case HCPSToken.Smaller:
                    case HCPSToken.SmallerOrEqual:
                        Jezeli jezeli = new Jezeli();
                        jezeli.WyrazenieLewe   = ss;
                        jezeli.WarunekLogiczny = new WarunekLogiczny()
                        {
                            Typ = WarunekLogiczny.TokenNaWarunek(token)
                        };
                        jezeli.WyrazeniePrawe = Wyrazenie.Parsuj(tokenizer);
                        return(jezeli);

                    default:
                        tokenizer.Back();
                        break;
                    }

                    tokenizer.Back();
                    return(ss);
                }
                }

                break;

            case HCPSToken.Variable:
            {
                string zmienna = tokenizer.Value;
                token = tokenizer.Next();
                switch (token)
                {
                case HCPSToken.Assignment:
                {
                    Przypisanie przypisanie = new Przypisanie();
                    przypisanie.Zmienna = new ZmiennaNieistniejaca()
                    {
                        Nazwa = zmienna
                    };
                    przypisanie.Wyrazenie = Wyrazenie.Parsuj(tokenizer);

                    token = tokenizer.Next();
                    switch (token)
                    {
                    case HCPSToken.Bigger:
                    case HCPSToken.BiggerOrEqual:
                    case HCPSToken.Equal:
                    case HCPSToken.NotEqual:
                    case HCPSToken.Smaller:
                    case HCPSToken.SmallerOrEqual:
                        Jezeli jezeli = new Jezeli();
                        jezeli.WyrazenieLewe   = przypisanie.Wyrazenie;
                        jezeli.WarunekLogiczny = new WarunekLogiczny()
                        {
                            Typ = WarunekLogiczny.TokenNaWarunek(token)
                        };
                        jezeli.WyrazeniePrawe = Wyrazenie.Parsuj(tokenizer);
                        przypisanie.Wyrazenie = jezeli;
                        break;

                    default:
                        tokenizer.Back();
                        break;
                    }

                    przypisanie.Check();
                    return(przypisanie);
                }

                case HCPSToken.InstructionEnd:
                case HCPSToken.ParenthesisClose:
                case HCPSToken.CommaSeparator:
                {
                    tokenizer.Back();
                    return(new ZmiennaNieistniejaca()
                            {
                                Nazwa = zmienna
                            });
                }

                case HCPSToken.Addition:
                case HCPSToken.Division:
                case HCPSToken.Multiplication:
                case HCPSToken.Subtraction:
                case HCPSToken.And:
                case HCPSToken.Or:
                case HCPSToken.Modulo:
                {
                    Wyrazenie w = Wyrazenie.Parsuj(tokenizer);
                    if (w is Operacja)
                    {
                        Wyrazenie w1 = ((Operacja)w).OperandLewy;
                        OperatorDwuargumentowyTyp oper = Operacja.TokenNaOperator(token);
                        Operacja oo = new Operacja()
                        {
                            OperandLewy = new ZmiennaNieistniejaca()
                            {
                                Nazwa = zmienna
                            },
                            OperandPrawy = w,
                            Operator     = oper
                        };
                        return(oo);
                    }
                    else
                    {
                        Operacja operacja = new Operacja()
                        {
                            OperandLewy = new ZmiennaNieistniejaca()
                            {
                                Nazwa = zmienna
                            },
                            OperandPrawy = w,
                            Operator     = Operacja.TokenNaOperator(token)
                        };
                        return(operacja);
                    }
                }

                case HCPSToken.Bigger:
                case HCPSToken.BiggerOrEqual:
                case HCPSToken.Equal:
                case HCPSToken.NotEqual:
                case HCPSToken.Smaller:
                case HCPSToken.SmallerOrEqual:
                {
                    ZmiennaNieistniejaca zn = new ZmiennaNieistniejaca()
                    {
                        Nazwa = zmienna
                    };
                    switch (token)
                    {
                    case HCPSToken.Bigger:
                    case HCPSToken.BiggerOrEqual:
                    case HCPSToken.Equal:
                    case HCPSToken.NotEqual:
                    case HCPSToken.Smaller:
                    case HCPSToken.SmallerOrEqual:
                        Jezeli jezeli = new Jezeli();
                        jezeli.WyrazenieLewe   = zn;
                        jezeli.WarunekLogiczny = new WarunekLogiczny()
                        {
                            Typ = WarunekLogiczny.TokenNaWarunek(token)
                        };
                        jezeli.WyrazeniePrawe = Wyrazenie.Parsuj(tokenizer);
                        return(jezeli);

                    default:
                        tokenizer.Back();
                        break;
                    }

                    tokenizer.Back();
                    return(zn);
                }
                }

                break;
            }

            case HCPSToken.BlockEnd:
                return(null);

            case HCPSToken.ParenthesisClose:
                return(null);

            case HCPSToken.InstructionEnd:
                return(null);

            case HCPSToken.CommaSeparator:
                return(null);

            case HCPSToken.Comment:
                return(Parsuj(tokenizer));
            }
            throw new ParsingScriptException(string.Format(UI.Language.Instance.GetString(UI.UIStrings.CannotReadExpression2), token, tokenizer.Value, tokenizer.GetPosition(tokenizer.Position)));
        }