public opCodeBinary(tokenizer tokenizer, opCode param1, eTokenType tt, opCode param2) { mParam1 = param1; mParam2 = param2; EvalType v1Type = mParam1.EvalType; EvalType v2Type = mParam2.EvalType; switch (tt) { case eTokenType.operator_plus: if (v1Type == EvalType.Number & v2Type == EvalType.Number) { mValueDelegate = NUM_PLUS_NUM; mEvalType = EvalType.Number; } else if (v1Type == EvalType.Number & v2Type == EvalType.Date) { SwapParams(ref mParam1, mParam2); mValueDelegate = DATE_PLUS_NUM; mEvalType = EvalType.Date; } else if (v1Type == EvalType.Date & v2Type == EvalType.Number) { mValueDelegate = DATE_PLUS_NUM; mEvalType = EvalType.Date; } else if (mParam1.CanReturn(EvalType.String) & mParam2.CanReturn(EvalType.String)) { Convert(tokenizer, param1, ref EvalType.String); mValueDelegate = STR_CONCAT_STR; mEvalType = EvalType.String; } break; case eTokenType.operator_minus: if (v1Type == EvalType.Number & v2Type == EvalType.Number) { mValueDelegate = NUM_MINUS_NUM; mEvalType = EvalType.Number; } else if (v1Type == EvalType.Date & v2Type == EvalType.Number) { mValueDelegate = DATE_MINUS_NUM; mEvalType = EvalType.Date; } else if (v1Type == EvalType.Date & v2Type == EvalType.Date) { mValueDelegate = DATE_MINUS_DATE; mEvalType = EvalType.Number; } break; case eTokenType.operator_mul: if (v1Type == EvalType.Number & v2Type == EvalType.Number) { mValueDelegate = NUM_MUL_NUM; mEvalType = EvalType.Number; } break; case eTokenType.operator_div: if (v1Type == EvalType.Number & v2Type == EvalType.Number) { mValueDelegate = NUM_DIV_NUM; mEvalType = EvalType.Number; } break; case eTokenType.operator_percent: if (v1Type == EvalType.Number & v2Type == EvalType.Number) { mValueDelegate = NUM_PERCENT_NUM; mEvalType = EvalType.Number; } break; case eTokenType.operator_and: case eTokenType.operator_or: Convert(tokenizer, mParam1, ref EvalType.Boolean); Convert(tokenizer, mParam2, ref EvalType.Boolean); switch (tt) { case eTokenType.operator_or: mValueDelegate = BOOL_OR_BOOL; mEvalType = EvalType.Boolean; break; case eTokenType.operator_and: mValueDelegate = BOOL_AND_BOOL; mEvalType = EvalType.Boolean; break; } break; } if (mValueDelegate == null) { tokenizer.RaiseError("Cannot apply the operator " + tt.ToString().Replace("operator_", "") + " on " + v1Type.ToString() + " and " + v2Type.ToString()); } }
public opCodeConvert(tokenizer tokenizer, iEvalTypedValue param1, EvalType EvalType) { mParam1 = param1; switch (EvalType) { case EvalType.Boolean: mValueDelegate = TBool; mEvalType = EvalType.Boolean; break; case EvalType.Date: mValueDelegate = TDate; mEvalType = EvalType.Date; break; case EvalType.Number: mValueDelegate = TNum; mEvalType = EvalType.Number; break; case EvalType.String: mValueDelegate = TStr; mEvalType = EvalType.String; break; default: tokenizer.RaiseError("Cannot convert " + param1.SystemType.Name + " to " + EvalType); break; } }
public opCode Parse(string str) { if (str == null) str = string.Empty; mTokenizer = new tokenizer(this, str, eParserSyntax.cSharp); mTokenizer.NextToken(); opCode res = ParseExpr(null, ePriority.none); if (mTokenizer.type == eTokenType.end_of_formula) { if (res == null) res = new opCodeImmediate(EvalType.String, string.Empty); return res; } else { mTokenizer.RaiseUnexpectedToken(""); } }
protected internal void Convert(tokenizer tokenizer, ref opCode param1, EvalType EvalType) { if (param1.EvalType != EvalType) { if (param1.CanReturn(EvalType)) { param1 = new opCodeConvert(tokenizer, param1, EvalType); } else { tokenizer.RaiseError("Cannot convert " + param1.Name + " into " + EvalType); } } }
private void button1_Click(object sender, RoutedEventArgs e) { OpenFileDialog dialog = new OpenFileDialog(); dialog.InitialDirectory = "C:\\"; //dialog.Filter = "WS datoteke | *.ws"; bool? rezultat = dialog.ShowDialog(); if (rezultat == true) { try { using (FileStream tok = dialog.File.OpenRead()) { //MessageBox.Show("nekaj"); byte[] pomnilnik = new byte[(int)tok.Length]; tok.Read(pomnilnik, 0, (int)tok.Length); char[] niz = new char[pomnilnik.Length]; for (int i = 0; i < pomnilnik.Length; i++) { niz[i] = (char)pomnilnik[i]; } IsolatedStorageFile ISF = IsolatedStorageFile.GetUserStoreForApplication(); IsolatedStorageFileStream tok2 = new IsolatedStorageFileStream("izvorna.koda", FileMode.Create, ISF); //IsolatedStorageFileStream tok2 = new IsolatedStorageFileStream("tabela.podatki", FileMode.Create, ISF); tok2.Write(pomnilnik, 0, pomnilnik.Length); tok2.Close(); Pocisti(0); //MessageBox.Show("nekaj"); for (int i = 0; i < pomnilnik.Length; i++) { textBox1.Text += niz[i]; } IsolatedStorageFileStream tok3 = new IsolatedStorageFileStream("izvorna.koda", FileMode.Open, ISF); tok3.Read(pomnilnik, 0, (int)tok3.Length); tok3.Close(); niz = new char[pomnilnik.Length]; for (int i = 0; i < pomnilnik.Length; i++) { niz[i] = (char)pomnilnik[i]; } string vsebina_datoteke = "", vsebina_tabele = ""; for (int i = 0; i < pomnilnik.Length; i++) vsebina_datoteke += niz[i]; IsolatedStorageFileStream tok4 = new IsolatedStorageFileStream("tabela.podatki", FileMode.Open, ISF); pomnilnik = new byte[tok4.Length]; tok4.Read(pomnilnik, 0, (int)tok4.Length); //vredu tok4.Close(); niz = new char[pomnilnik.Length]; for (int i = 0; i < pomnilnik.Length; i++) { niz[i] = (char)pomnilnik[i]; } for (int i = 0; i < pomnilnik.Length; i++) vsebina_tabele += niz[i]; //MessageBox.Show("Test"); tokenizer leksikalni_analizator = new tokenizer(vsebina_tabele, vsebina_datoteke); //MessageBox.Show("Test lekser"); //MessageBox.Show(vsebina_tabele); //MessageBox.Show(vsebina_datoteke); ////MessageBox.Show((leksikalni_analizator == null) + " (ali je null)"); //String tabela = leksikalni_analizator.vrniTabelo(); ////MessageBox.Show("Test tabela"); Tokenizer = leksikalni_analizator; parse(); //textBox2.Text = izpis; ////MessageBox.Show(izpis); ////MessageBox.Show(rezultatiIzpis); //Zacasni izpis tabele osnovnih leksikalnih simbolov in leksilanih vrednosti. //MessageBox.Show(tabela.ToString()); textBox2.Text = izpis; } } catch (Exception er) { MessageBox.Show("Napaka pri odpiranju datoteke izvorne programske kode!"); MessageBox.Show(er.Message); } } else MessageBox.Show("Preklicano!"); }