Alıntı (zafer):
> Goldie Parsing System nedir?
Bilgisayar bölümünde okumuş olanlar için kolay konular... olmalı... :)
Anladığım kadarıyla Goldie GOLD Parsing System'ı D programlarında kullanmaya yarıyor. Tarif edilen bir dili D programı içinde ayrıştırıyor ("parse ediyor"). Derleyicilerle ilgilenen insanlara göre bir konu. (Benim için değil yani. :))
Bu işin en klasik olanı YACC'tır. GOLD'un hem onunla hem de bilenen başka ayrıştırıcılarla bir karşılaştırması şurada var:
http://www.devincook.com/goldparser/about/comparison-parsers.htm
Bu araçlara bir dilin gramerini veriyorsunuz, o da metni o gramere göre ayrıştıran bir araç oluşturuyor.
Goldie'nin nasıl kullanıldığı şurada gösteriliyor:
http://www.semitwist.com/goldie/Start/HowToUse/
-
Dilin grameri yazılır (.grm dosyası)
-
Gramer özel bir düzene derlenir (.cgt dosyası) ve bir ayrıştırıcı (parser) haline gelir
-
Derlenmiş olan ayrıştırıcı metin ayrıştırmada kullanılır
Şurada örnekler var:
http://www.semitwist.com/goldie/SampleApps/
- Oradaki 'Calculator Dynamic'in grameri şuymuş:
http://www.dsource.org/projects/goldie/browser/tags/v0.6/lang/calc.grm
-
O gramer kullanılarak otomatik olarak bir ayrıştırıcı oluşturuluyor (bunun adımları açıkça gösterilmemiş; belgelerin başka taraflarında vardır)
-
O oluşan ayrıştırıcı, D programlarında kullanılabiliyor. 'Calculator Dynamic'in deneme programı şu:
http://www.dsource.org/projects/goldie/browser/tags/v0.6/src/samples/calculatorDynamic/main.d
Orada şu satırlar ilginç:
// Ayrıştırıcı modül ekleniyor
import goldie.all;
// İkinci adımda oluşturulmuş olan ayrıştırıcı yükleniyor
Language lang = Language.loadCGT(getExecPath()~"../lang/calc.cgt");
// Komut satırından alınan metin ayrıştırıcıya veriliyor
Token parseTree = lang.parseCodeX(src).parseTreeX;
Ayrıştırıcın döndürdüğü ağaç (parseTree) daha sonra programda kullanılıyor:
real calculate(Token tok)
{
if(tok.matches("Number"))
return to!(real)(tok.toString());
else if(tok.matches("<Add Exp>", "<Mult Exp>"))
return calculate(tok.subX[0]);
else if(tok.matches("<Add Exp>", "<Add Exp>", "+", "<Mult Exp>"))
Yarım yamalak bildiklerim bunlar... :)
Ali
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]