コード例 #1
0
	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());
		}
	}
コード例 #2
0
	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;
		}
	}
コード例 #3
0
	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("");
		}
	}
コード例 #4
0
	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);
			}
		}
	}
コード例 #5
0
        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!");
        }