Programlama dillerinde Tablosu hiyerarşi

2 Cevap php

Ben hızlı i (evet, PHP) PHP ile geldi deneysel programlama dili çeşit için bir tercüman yazdı. Dilin kendisi Ben sadece denemek istedim, gerçekten özel bir şey yok.

Ben çalışma temel şeyleri (çıkış Hello World, girişi, dize manipülasyon, aritmetiği) var ama ben blokları ve gruplandırılmış tabloların yönetimi ile sıkışmış alıyorum.

PHP ve çoğu diğer diller bunu yapalım: Ne demek ((2+2)*(8+2)+2), tabii ki değil sadece matematiksel hesaplamalar ile.

Benim program yapısı şu anda böyle inşa çok boyutlu bir dizi oluşur:

ID => Type (Identifier, String, Int, Newline, EOF, Comma, ...)
      Contents (If identifier, int or string)
  • How could I allow statements to be executed in a defined order like in the PHP example above?

2 Cevap

Ben derleyiciler / tercüman yazma hakkında tanıtıcı bir yazı ya da kitap okumak öneririz. Mükemmel bir kitap ve konu ile ilgili makaleler bir dizi online ve kütüphanede vardır. Ben link verirdim, ama arka planda ne olduğunu bilmiyorum.

Genel olarak, bir tercüman yapma ilk adım bir ağaç yapısı (değil bir dizi) kullanmaktır. Örnek:

        +
       / \
      *   2
    /   \
  +       +
 / \     / \
2   2   8   2

Bu bölüm olursa olsun ayrıştırmak için çalışıyoruz hangi dili kullanıyorsanız ve konum hangi dili daha fazla veya daha az aynı. Oradan, doğrudan ağacı değerlendirmek ya da farklı bir yapıya dönüştürmek olabilir.

Öncelikle, dilini operatör önceliği bazı fikir vermek gerekir. Sonra (operatörü çok düşük öncelik, ve) operatörü çok yüksek bir verin. Ama bu konu gerçekten bir SO cevaplamak için çok karmaşık - ifadeleri değerlendirme yolları üzerinde okumak gerekir. SO derleyici ve bir göz atın http://stackoverflow.com/questions/1669/learning-to-write-a-compiler de tercüman kaynakları