public new static Jezeli Parsuj(ITokenizer tokenizer) { Jezeli jezeli = new Jezeli(); jezeli.WyrazenieLewe = Wyrazenie.Parsuj(tokenizer); HCPSToken token = tokenizer.Next(); if (__tokenyOperatorow.Contains(token)) { jezeli.WarunekLogiczny = new WarunekLogiczny() { Typ = WarunekLogiczny.TokenNaWarunek(token) }; jezeli.WyrazeniePrawe = Wyrazenie.Parsuj(tokenizer); jezeli.Check(); return(jezeli); } else { if (token == HCPSToken.ParenthesisClose) { tokenizer.Back(); jezeli.WarunekLogiczny = new WarunekLogiczny() { Typ = WarunekLogicznyTyp.Prawdziwy }; jezeli.Check(); return(jezeli); } } throw new ParsingScriptException(UI.Language.Instance.GetString(UI.UIStrings.IncorrectIfStatementDefinition)); }
public static OperatorDwuargumentowyTyp TokenNaOperator(HCPSToken token) { switch (token) { case HCPSToken.Addition: return(OperatorDwuargumentowyTyp.Dodaj); case HCPSToken.Subtraction: return(OperatorDwuargumentowyTyp.Odejmij); case HCPSToken.Multiplication: return(OperatorDwuargumentowyTyp.Pomnoz); case HCPSToken.Division: return(OperatorDwuargumentowyTyp.Podziel); case HCPSToken.And: return(OperatorDwuargumentowyTyp.I); case HCPSToken.Or: return(OperatorDwuargumentowyTyp.Lub); case HCPSToken.Modulo: return(OperatorDwuargumentowyTyp.Modulo); default: return(OperatorDwuargumentowyTyp.Nieznany); } }
public static WarunekLogicznyTyp TokenNaWarunek(HCPSToken token) { switch (token) { case HCPSToken.Bigger: return(WarunekLogicznyTyp.Wiekszy); case HCPSToken.BiggerOrEqual: return(WarunekLogicznyTyp.WiekszyLubRowny); case HCPSToken.Equal: return(WarunekLogicznyTyp.Rowny); case HCPSToken.NotEqual: return(WarunekLogicznyTyp.Rozny); case HCPSToken.Smaller: return(WarunekLogicznyTyp.Mniejszy); case HCPSToken.SmallerOrEqual: return(WarunekLogicznyTyp.MniejszyLubRowny); default: throw new ParsingScriptException(string.Format(UI.Language.Instance.GetString(UI.UIStrings.UnrecognizedStatementType), token)); } }
public new static Zmienna Parsuj(ITokenizer tokenizer) { Zmienna zmienna = new Zmienna(); HCPSToken token = tokenizer.Next(); if (token == HCPSToken.Variable) { zmienna.Nazwa = tokenizer.Value; if (tokenizer.Next() == HCPSToken.BlockBegin) { while ((token = tokenizer.Next()) != HCPSToken.BlockEnd) { if (token == HCPSToken.Comment) { continue; } 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.IncorrectVariableDefinition), zmienna.Nazwa)); } switch (sa.Left.ToLowerInvariant()) { case "module": zmienna.Modul = sa.Right; break; case "id": zmienna.ID = sa.Right; break; case "direct": zmienna.Kierunek = Utils.KierunekZmiennejFromString(sa.Right); break; case "type": zmienna.Typ = Utils.VariableTypeFromString(sa.Right); break; case "value": zmienna._Wartosc = zmienna._WartoscPoczatkowa = sa.Right; break; case "function": zmienna._funkcjaNazwa = sa.Right; break; default: throw new ParsingScriptException(string.Format(UI.Language.Instance.GetString(UI.UIStrings.InvalidVariableDefinitionProperty), sa.Left, zmienna.Nazwa, tokenizer.GetPosition(tokenizer.Position))); } } zmienna.Check(); return(zmienna); throw new ParsingScriptException(string.Format(UI.Language.Instance.GetString(UI.UIStrings.CannotParseVariableDefinition), zmienna.Nazwa)); } } throw new ParsingScriptException(string.Format(UI.Language.Instance.GetString(UI.UIStrings.InvalidVariableDefinition), tokenizer.GetPosition(tokenizer.Position))); }
public new static DefinicjaFunkcji Parsuj(ITokenizer tokenizer) { DefinicjaFunkcji funkcja = new DefinicjaFunkcji(); if (tokenizer.Next() == HCPSToken.Word) { funkcja.Nazwa = tokenizer.Value; // odczytanie nazw argumentów if (tokenizer.Next() == HCPSToken.ParenthesisOpen) { List <ZmiennaParametr> argumenty = new List <ZmiennaParametr>(); HCPSToken token = HCPSToken.Unknown; while ((token = tokenizer.Next()) == HCPSToken.Variable) { argumenty.Add(new ZmiennaParametr() { Nazwa = tokenizer.Value }); if (tokenizer.Next() != HCPSToken.CommaSeparator) { tokenizer.Back(); } } funkcja.argumenty = argumenty.ToArray(); if (token != HCPSToken.ParenthesisClose) { throw new Exception(string.Format(UI.Language.Instance.GetString(UI.UIStrings.IncorrectFunctionDefinition), tokenizer.GetPosition(tokenizer.Position))); } } else { throw new Exception(string.Format(UI.Language.Instance.GetString(UI.UIStrings.IncorrectFunctionDefinition), tokenizer.GetPosition(tokenizer.Position))); } if (tokenizer.Next() == HCPSToken.BlockBegin) { List <Akcje> akcje = new List <Akcje>(); do { Akcje a = Akcje.Parsuj(tokenizer); if (a != null) { akcje.Add(a); } }while (tokenizer.LastToken != HCPSToken.BlockEnd); funkcja.akcje = akcje.ToArray(); funkcja.Check(); return(funkcja); } } throw new Exception(string.Format(UI.Language.Instance.GetString(UI.UIStrings.IncorrectFunctionDefinition), tokenizer.GetPosition(tokenizer.Position))); }
public static string TokenToString(HCPSToken token) { switch (token) { case HCPSToken.Addition: return("+"); case HCPSToken.Assignment: return("="); case HCPSToken.BlockBegin: return("{"); case HCPSToken.BlockEnd: return("}"); case HCPSToken.CommaSeparator: return(","); case HCPSToken.Comment: return("//"); case HCPSToken.Division: return("/"); case HCPSToken.InstructionEnd: return(";"); case HCPSToken.Modulo: return("%"); case HCPSToken.Multiplication: return("*"); case HCPSToken.ParenthesisClose: return(")"); case HCPSToken.ParenthesisOpen: return("("); case HCPSToken.String: return("\""); case HCPSToken.Subtraction: return("-"); case HCPSToken.Variable: return("$"); } return(""); }
public new static ZmianaZmiennych Parsuj(ITokenizer tokenizer) { ZmianaZmiennych zdarzenie = new ZmianaZmiennych(); HCPSToken token = tokenizer.Next(); if (token == HCPSToken.Number) { if (!int.TryParse(tokenizer.Value, out zdarzenie.Minimum)) { throw new ParsingScriptException(string.Format(UI.Language.Instance.GetString(UI.UIStrings.IncorrectNumberForVariablesChangeEvent), tokenizer.Value)); } token = tokenizer.Next(); } List <Zmienna> zmienne = new List <Zmienna>(); while (token == HCPSToken.Variable) { Zmienna z = new ZmiennaNieistniejaca() { Nazwa = tokenizer.Value }; // sprawdzenie czy ta zmienna nie istnieje już na liście for (int i = 0; i < zmienne.Count; i++) { if (zmienne[i].Nazwa == z.Nazwa) { throw new ParsingScriptException(string.Format(UI.Language.Instance.GetString(UI.UIStrings.RepeatedVariableInVariablesChangeEvent), z.Nazwa)); } } zmienne.Add(z); token = tokenizer.Next(); } if (zmienne.Count < 1) { throw new ParsingScriptException(UI.Language.Instance.GetString(UI.UIStrings.VariablesChangeEventRequireAtLeastTwoVariables)); } zdarzenie.Zmienne = zmienne.ToArray(); if (token == HCPSToken.BlockBegin) { zdarzenie.Akcje = Akcje.Parsuj(tokenizer); zdarzenie.Check(); } else { throw new ParsingScriptException(string.Format(UI.Language.Instance.GetString(UI.UIStrings.IncorrectVariablesChangeEventDefinition), tokenizer.GetPosition(tokenizer.Position))); } return(zdarzenie); }
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))); }
public new static Argument Parsuj(ITokenizer tokenizer) { Argument argument = new Argument(); argument.argument = Wyrazenie.Parsuj(tokenizer); if (argument.argument == null) { return(null); } HCPSToken token = tokenizer.Next(); if (token != HCPSToken.CommaSeparator && token != HCPSToken.ParenthesisClose) { tokenizer.Back(); } argument.Check(); return(argument); }
public SimpleAssignment ReadSimpleAssignment(HCPSToken token, string value) { SimpleAssignment result = new SimpleAssignment(); while (token == HCPSToken.Comment) { token = Next(); } if (token == HCPSToken.Variable || token == HCPSToken.Word) { result.Left = Value; token = Next(); while (token == HCPSToken.Comment) { token = Next(); } if (token == HCPSToken.Assignment) { token = Next(); while (token == HCPSToken.Comment) { token = Next(); } if (token == HCPSToken.Word || token == HCPSToken.Number || token == HCPSToken.String) { result.Right = Value; token = Next(); while (token == HCPSToken.Comment) { token = Next(); } if (token == HCPSToken.InstructionEnd) { return(result); } } } } if (token == HCPSToken.BlockEnd) { return(null); } throw new ParsingScriptException(string.Format(UI.Language.Instance.GetString(UI.UIStrings.CannotReadAssignmentDefinition), GetPosition(Position))); }
public static IncludeStatement Parsuj(ITokenizer tokenizer) { IncludeStatement result = new IncludeStatement(); HCPSToken token = tokenizer.Next(); if (token == HCPSToken.BlockBegin) { while ((token = tokenizer.Next()) != HCPSToken.BlockEnd) { if (token == HCPSToken.Comment) { continue; } SimpleAssignment sa = tokenizer.ReadSimpleAssignment(token, tokenizer.Value); if (sa == null || sa.Left == null || sa.Right == null) { throw new ParsingScriptException(UI.Language.Instance.GetString(UI.UIStrings.IncorrectIncludeDefinition)); } switch (sa.Left.ToLowerInvariant()) { case "file": result.FilePath = sa.Right; break; case "script": result.ScriptName = sa.Right; break; default: throw new ParsingScriptException(string.Format(UI.Language.Instance.GetString(UI.UIStrings.InvalidIncludePropertyDefinition), sa.Left, tokenizer.GetPosition(tokenizer.Position))); } } // sprawdzenie czy file i script są różne od null i "" if (string.IsNullOrEmpty(result.FilePath) || string.IsNullOrEmpty(result.ScriptName)) { throw new ParsingScriptException(UI.Language.Instance.GetString(UI.UIStrings.MissingFileOrScriptPropertyInIncludeDefinition)); } return(result); } throw new ParsingScriptException(string.Format(UI.Language.Instance.GetString(UI.UIStrings.CannotReadIncludeDefinition), tokenizer.GetPosition(tokenizer.Position))); }
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()); }
public bool Peek(out HCPSToken token, out string value) { token = HCPSToken.Unknown; value = null; return(false); }
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))); }