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 override void PrzypiszReferencje(ISlownikSkryptu slownik) { if (Zmienna is ZmiennaNieistniejaca) { Zmienna = (Zmienna)slownik.PobierzWartosc(Zmienna.Nazwa); Zmienna.SprawdzCzyMoznaUstawiacWartoscWSkrypcie(); } if (Wyrazenie is ZmiennaNieistniejaca) { Wartosc w = slownik.PobierzWartosc(((ZmiennaNieistniejaca)Wyrazenie).Nazwa); if (w is Zmienna) { Wyrazenie = (Zmienna)w; } else { if (w is Stala) { Wyrazenie = (Stala)w; } else { Wyrazenie = w; } } } else { Wyrazenie.PrzypiszReferencje(slownik); } }
public void SetValue(object value) { Nazwa = ""; Typ = HomeSimCockpitSDK.VariableType.Unknown; PrawdziwaZmienna = null; _value = value; }
public override void Check() { base.Check(); if (Wyrazenie is Operacja) { Wyrazenie = Operacja.Uporzadkuj((Operacja)Wyrazenie); } }
public Wyrazenie PobierzPierwszeNieWyrazenie(bool lewy) { Wyrazenie w = lewy ? OperandLewy : OperandPrawy; if (w is Operacja) { return(((Operacja)w).PobierzPierwszeNieWyrazenie(lewy)); } return(w); }
public override void PrzypiszReferencje(ISlownikSkryptu slownik) { if (argument is ZmiennaNieistniejaca) { argument = slownik.PobierzWartosc(((ZmiennaNieistniejaca)argument).Nazwa); } else { argument.PrzypiszReferencje(slownik); } }
public override void PrzypiszReferencje(ISlownikSkryptu slownik) { if (Wyrazenie == null) { return; } if (Wyrazenie is ZmiennaNieistniejaca) { Wyrazenie = (Zmienna)slownik.PobierzWartosc(((ZmiennaNieistniejaca)Wyrazenie).Nazwa); } else { Wyrazenie.PrzypiszReferencje(slownik); } }
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 new static Akcje Parsuj(ITokenizer tokenizer) { List <Wyrazenie> wyrazenia = new List <Wyrazenie>(); do { Wyrazenie wyrazenie = Wyrazenie.Parsuj(tokenizer); if (wyrazenie != null) { wyrazenia.Add(wyrazenie); } }while (tokenizer.LastToken != HCPSToken.BlockEnd); Akcje akcje = new Akcje(); akcje.akcje = wyrazenia.ToArray(); akcje.Check(); return(akcje); throw new Exception(string.Format(UI.Language.Instance.GetString(UI.UIStrings.CannotReadExpression), tokenizer.GetPosition(tokenizer.Position))); }
public override void PrzypiszReferencje(ISlownikSkryptu slownik) { if (WyrazenieLewe is ZmiennaNieistniejaca) { WyrazenieLewe = slownik.PobierzWartosc(((ZmiennaNieistniejaca)WyrazenieLewe).Nazwa); } else { WyrazenieLewe.PrzypiszReferencje(slownik); } if (WarunekLogiczny.Typ != WarunekLogicznyTyp.Prawdziwy) { if (WyrazeniePrawe is ZmiennaNieistniejaca) { WyrazeniePrawe = slownik.PobierzWartosc(((ZmiennaNieistniejaca)WyrazeniePrawe).Nazwa); } else { WyrazeniePrawe.PrzypiszReferencje(slownik); } } }
public Wyrazenie GetFirstValueOrLastExpressionAndChangeWithExpression(bool left, Wyrazenie wyrazenie) { Wyrazenie w = left ? OperandLewy : OperandPrawy; if (w is Wartosc) { if (left) { OperandLewy = wyrazenie; } else { OperandPrawy = wyrazenie; } return(w); } if (w is Operacja) { return(((Operacja)w).GetFirstValueOrLastExpressionAndChangeWithExpression(left, wyrazenie)); } throw new ParsingScriptException(UI.Language.Instance.GetString(UI.UIStrings.ExpressionNotFound)); }
public void PrzypiszOstatniNull(Wyrazenie wyrazenie, bool lewy) { Wyrazenie w = lewy ? OperandLewy : OperandPrawy; if (w == null) { if (lewy) { OperandLewy = wyrazenie; } else { OperandPrawy = wyrazenie; } } else { if (w is Operacja) { ((Operacja)w).PrzypiszOstatniNull(wyrazenie, lewy); } } }
public override void PrzypiszReferencje(ISlownikSkryptu slownik) { if (OperandLewy == null || OperandPrawy == null) { throw new CheckingScriptException(); } if (OperandLewy is ZmiennaNieistniejaca) { OperandLewy = /*(Zmienna)*/ slownik.PobierzWartosc(((ZmiennaNieistniejaca)OperandLewy).Nazwa); } else { OperandLewy.PrzypiszReferencje(slownik); } if (OperandPrawy is ZmiennaNieistniejaca) { OperandPrawy = /*(Zmienna)*/ slownik.PobierzWartosc(((ZmiennaNieistniejaca)OperandPrawy).Nazwa); } else { OperandPrawy.PrzypiszReferencje(slownik); } }
public ArgumentBindingInfo(object value, Wyrazenie prawdziwaZmienna) { Value = value; PrawdziwaZmienna = prawdziwaZmienna; }
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))); }