예제 #1
0
 private void ifadeDerle(Ifade e)
 {
     if (e is TamsayiKalibi)
     {
         Yaz("PushTamsayi " + ((TamsayiKalibi)e).deger);
     }
     else if (e is StringKalibi)
     {
         Yaz("PushString " + ((StringKalibi)e).deger);
     }
     else if (e is Tanim)
     {
         Yaz("PushTanim " + ((Tanim)e).deger);
     }
     else if (e is CagirmaIfadesi)
     {
         CagirmaIfadesi ci = (CagirmaIfadesi)e;
         foreach (Ifade exp in ci.argumanlar)
         {
             ifadeDerle(exp);
         }
         Yaz("Cagir " + ci.ad);
     }
     else if (e is MatematikIfadesi)
     {
         MatematikIfadesi mi = (MatematikIfadesi)e;
         ifadeDerle(mi.solIfade);
         ifadeDerle(mi.sagIfade);
         Yaz(mi.islem.ToString());
     }
     else if (e is ParantezIfadesi)
     {
         ParantezIfadesi pi = (ParantezIfadesi)e;
         ifadeDerle(pi.deger);
     }
 }
예제 #2
0
        private Ifade expressionParseEt()
        {
            Ifade donus = null;
            Token t     = tokenListesi.tokenAl();

            if (tokenListesi.gozat()._tokenTuru == Tokenlar.SolParantez)
            {
                CagirmaIfadesi c = new CagirmaIfadesi();
                if (t._tokenTuru == Tokenlar.Tanim)
                {
                    c.ad = t._tokenDegeri;
                }
                tokenListesi._sayac++;
                if (tokenListesi.gozat()._tokenTuru == Tokenlar.SagParantez)
                {
                    c.argumanlar = new List <Ifade>();
                    donus        = c;
                }
                else
                {
                    c.argumanlar = cagirmaArgumaniParseEt();
                    donus        = c;
                }
            }
            else if (t._tokenTuru == Tokenlar.TamSayiKalibi)
            {
                TamsayiKalibi tsk = new TamsayiKalibi();
                tsk.deger = Convert.ToInt32(t._tokenDegeri);
                donus     = tsk;
            }
            else if (t._tokenTuru == Tokenlar.StringKalibi)
            {
                StringKalibi sk = new StringKalibi();
                sk.deger = t._tokenDegeri;
                donus    = sk;
            }
            else if (t._tokenTuru == Tokenlar.Tanim)
            {
                Tanim tanim = new Tanim();
                tanim.deger = t._tokenDegeri;
                donus       = tanim;
            }
            else if (t._tokenTuru == Tokenlar.SolParantez)
            {
                Ifade ifade = expressionParseEt();

                if (tokenListesi.gozat()._tokenTuru == Tokenlar.SagParantez)
                {
                    tokenListesi._sayac++;
                }

                ParantezIfadesi p = new ParantezIfadesi();
                p.deger = ifade;

                if (tokenListesi.gozat()._tokenTuru == Tokenlar.Topla || tokenListesi.gozat()._tokenTuru == Tokenlar.Cikar || tokenListesi.gozat()._tokenTuru == Tokenlar.Carp || tokenListesi.gozat()._tokenTuru == Tokenlar.Bol)
                {
                    tokenListesi._sayac++;
                    Ifade            e  = expressionParseEt();
                    MatematikIfadesi mi = new MatematikIfadesi();
                    mi.solIfade = p;
                    mi.sagIfade = e;
                    mi.islem    = tokenListesi.gozat()._tokenTuru;
                    donus       = mi;
                }
                else
                {
                    donus = p;
                }
            }
            if (tokenListesi.gozat()._tokenTuru == Tokenlar.Topla || tokenListesi.gozat()._tokenTuru == Tokenlar.Cikar || tokenListesi.gozat()._tokenTuru == Tokenlar.Carp || tokenListesi.gozat()._tokenTuru == Tokenlar.Bol)
            {
                MatematikIfadesi mi = new MatematikIfadesi();
                mi.islem = tokenListesi.gozat()._tokenTuru;
                tokenListesi._sayac++;
                mi.solIfade = donus;
                mi.sagIfade = expressionParseEt();
                donus       = mi;
            }
            return(donus);
        }