February 17, 2013

Alıntı:

>

Ben & işlecini kaldırmıştım. (Olmadı derken derleme hatası aldığını varsayıyorum çünkü söylemiyorsun.)

Aaa evet :D Şimdi uyguladım oldu. Hata Runtime idi :)

Alıntı:

>

Pegged'de ısrar etmiyorum ama yanlış anlama olmasını da istemem: Pegged, senin tasarım aşamasında şu anda yapmaya çalıştığın şeyi derleme aşamasında yapıyor. Ama ben de fazla basite indirgiyormuşum galiba: Pegged'i kullanabilmek için senin ifadenin bir biçimde string'e dönüştürülmesi gerekiyormuş: "2 + asd()[a() + 2] + 5".

Ben de kötü bir niyetle söylemedim zaten :) Demek istediğinizi tam olarak anlamadım "senin tasarım aşamasında şu anda yapmaya çalıştığın şeyi derleme aşamasında yapıyor" derken neyi kast ettiniz tam olarak?

Not: Şimdi anladım demek istediğinizi sistem compile time çalışıyor ama runtime olması lazım. Ama compile time çalışması işime yarar çünkü böyle bir şeye ihtiyacım var aslında çok ihtiyacım olan bir şey verdiniz bana :) Çok teşekkür ederim :)

Zekeriya

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 17, 2013

Zekeriya, bunun için google arama terimleri "math expression parser", "arithmetic expression parser", vs. olur. Yanına C++ veya başka bir dil de ekleyebilirsin.

Ama D için en güzeli, Philippe Sigaud'un Pegged modülü:

https://github.com/PhilippeSigaud/Pegged

D'nin derleme zamanı olanaklarının inanılmaz bir ürünü. Dili string olarak tarif ediyorsunuz ve derleme zamanında o dili gerçekleştiren bir tarayıcı oluşuyor. (Yukarıdaki sayfada tam da dört işlem için bir örneği var.)

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 17, 2013

Alıntı (zekeriyadurmus):

>

Alıntı:

>

auto calcd = calc(operator, t1, subCalcIt(t2, cOpLevel));
t1 = Token(line, p.calc, "",&calcd);

kodu bu şekilde yazdığımda da hata veriyor çünkü fonksiyon bittikten sonra struct siliniyor.

Program tasarımının en temel sorularından birisi odur: nesne sahiplikleri ve yakından ilgili olarak nesne yaşam süreçleri. :)

D'nin sunduğu kolaylıklardan yararlanmak en kolayı. Nesneler çöp toplayıcıya emanet edildiklerinde senin elinde o nesneye bir referans bulunduğu sürece nesne yaşamaya devam eder. Bunun için nesneyi new ile oluşturursun (new, yapılarda gösterge döndürür):

auto calcd = new calc(operator, t1, subCalcIt(t2, cOpLevel));
t1 = Token(line, p.calc, "", calcd);

Başka bir yöntem, calcd'yi işlevden çıkıldığında sonlanmayacak olan bir diziye yerleştirirsin ve adresini oradan kullanırsın. (Aslında, gösterdiğin '&calcd[$-1]' kodu da onu yapıyor zaten.)

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 17, 2013

Alıntı (zekeriyadurmus):

>

benim işime gelmez çünkü hız, çıktı formatı, giriş değerleri önemli benim için.

Kimin için önemli değil ki? :)

Alıntı:

>

Ayriyeten bu ifadelerin içerisinde 2 + asd()[a() + 2] + 5 gibi bir ifade olacak kendi yaptığımda bunu ayırt edebilirim.

Pegged'de ısrar etmiyorum ama yanlış anlama olmasını da istemem: Pegged, senin tasarım aşamasında şu anda yapmaya çalıştığın şeyi derleme aşamasında yapıyor. Ama ben de fazla basite indirgiyormuşum galiba: Pegged'i kullanabilmek için senin ifadenin bir biçimde string'e dönüştürülmesi gerekiyormuş: '"2 + asd()[a() + 2] + 5"'.

Alıntı:

>
> auto tmp = new calc(operator, t1, calcIt(t2, cOpLevel));
> t1 = Token(line, p.calc, "",&tmp);
> ```

> hocam bunu da denedim ama olmadı :(
>
> Zekeriya
>

Ben & işlecini kaldırmıştım. ;) (Olmadı derken derleme hatası aldığını varsayıyorum çünkü söylemiyorsun.)

Ali

-- 
[ Bu gönderi, <http://ddili.org/forum>'dan dönüştürülmüştür. ]
February 18, 2013

Ali hocam bir sorum olacak

auto zz = new calc(operator, t1, calcIt(t2, cOpLevel));
t1 = Token(line, p.calc, "", zz);

bu kodu aşağıdaki şekilde yapınca runtime hata veriyor. Sanırsam verinin üstüne başka bir veri yazılıyor

t1 = Token(line, p.calc, "", new calc(operator, t1, calcIt(t2, cOpLevel)));

Bunu bu şekilde yapmanın bir yolu yok mu?

Zekeriya

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 18, 2013

Alıntı (zekeriyadurmus):

>

Ali hocam bir sorum olacak

> auto zz = new calc(operator, t1, calcIt(t2, cOpLevel));
> t1 = Token(line, p.calc, "", zz);
> ```

> bu kodu aşağıdaki şekilde yapınca runtime hata veriyor. Sanırsam verinin üstüne başka bir veri yazılıyor
>
>

t1 = Token(line, p.calc, "", new calc(operator, t1, calcIt(t2, cOpLevel)));

>

Bunu bu şekilde yapmanın bir yolu yok mu?

Zekeriya

Ali hocama sormuşsun ama bir deneyim dedim; aynı şekilde bir hata alamadım. Farklı ne yaptık acaba?

import std.stdio;
import lexer, parser;

void main(string[] argv){
 auto t1 = Token(1, 1, "Token: Bir", null);
 auto t2 = Token(2, 2, "Token: iki", null);
 auto testToken = new calc("Testing...", t1, t2);

 auto testPtr = Token(3, 3, "Test Ptr", new calc("Testing...", t1, t2));

 writefln("%s: %s", testToken, *testToken);
 testPtr.writeln;
}

'/*
7F5427F9B'800': calc("Testing...", Token(1, 1, "Token: Bir", null), Token(2, 2, "Token: iki", null))
Token(3, 3, "Test Ptr", 7F5427F9B'780')
*/'

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 18, 2013

Alıntı:

>

Ali hocama sormuşsun ama bir deneyim dedim; aynı şekilde bir hata alamadım. Farklı ne yaptık acaba?

Sanırım sıkıntı fonksiyon çağırımı bittikten sonra başlıyor. Tam olarak ben de anlayamadım ama öyle şimdi şu anki halini githuba atacağım parantezlerle ilgili birşey yaptım ama parantez bitişinin kontrolü ile ilgili sıkıntı çıktı.

Zekeriya

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 18, 2013

Hocam an itibariyle son yaptığım değişiklikleri yükledim.

https://github.com/Rhodeus/Script2.0

Eğer inceleyip eksiklerimi, yanlışlarımı söylerseniz çok mutlu olurum :)

Not: Parantez kullanımını da ekledim.

Zekeriya

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 18, 2013

Bakıyorum ama cevap yazmam vakit alabilir...

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 18, 2013

Alıntı:

>

Bakıyorum ama cevap yazmam vakit alabilir...

Teşekkür ederim olsun önemli değil :)

Bu arada hocam ara çıktıyla ilgili ufak bir değişiklik yaptım google nin yaptığı gibi çıktı veriyor artık

https://www.google.com.tr/#hl=tr&newwindow=1&tbo=d&output=search&sclient=psy-ab&q=1+%2B+(((((6%2F2*((1+%2B+5+*+52)+*+2+%2B+5%2F5*2+%2B2))))))&oq=1+%2B+(((((6%2F2*((1+%2B+5+*+52)+*+2+%2B+5%2F5*2+%2B2))))))&gs_l=hp.3...5867.5867.0.6325.1.1.0.0.0.0.99.99.1.1.0.crnk_timediscounta..0.0...1.1.3.psy-ab.G51I5pE9U7g&pbx=1&bav=on.2,or.r_gc.r_pw.r_cp.r_qf.&bvm=bv.42553238,d.Yms&fp=fa77d15a911b9ea3&biw=1241&bih=606

Zekeriya

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]