«compilers» etiketlenmiş sorular

Kodu bir dilde (kaynak dil) okuyan ve başka bir dilde (hedef dil) eşdeğer bir programa çeviren programlar hakkında sorular.




2
Endüstride kullanılan birçok derleyicide devam eden geçiş stiline göre neden statik-tekli atama tercih edilir?
Statik-tek atama (SSA) hakkındaki Wikipedia sayfasına göre , SSA, LLVM, GCC, MSVC, Mono, Dalvik, SpiderMonkey ve V8 gibi büyük ve iyi bilinen projeler tarafından kullanılırken, devam eden stili kullanan projelerdeki sayfa (CPS) karşılaştırıldığında biraz eksik. CPS'nin öncelikle işlevsel dilleri uygulayan derleyiciler ve tercümanlar tarafından tercih edildiğini düşünüyorum - özellikle Haskell …

1
Neden ayrı lexing ve ayrıştırma?
Durum makinesinden tek geçiş kullanarak bir belgeyi ayrıştırmak mümkündür. İki geçişe sahip olmanın yararı nedir, yani. metni jetonlara dönüştürmek için bir lexer ve bu jetonlardaki üretim kurallarını test etmek için bir ayrıştırıcıya sahip olmak? Neden üretim kurallarını doğrudan metne uygulayan tek bir geçişiniz olmasın?

1
Ürün türleriyle tür çıkarımı
Birleştirici bir dil için bir derleyici üzerinde çalışıyorum ve tür çıkarımı desteği eklemek istiyorum. Hindley-Milner'ı anlıyorum, ama tip teorisini öğrenirken öğrendim, bu yüzden onu nasıl uyarlayacağımdan emin değilim. Aşağıdaki sistem sağlam mı ve karar verilebilir mi? Terim, değişmez bir terim, terimlerin bir bileşimi, bir terimin teklifi veya bir ilkeldir. e::=x∣∣ee∣∣[e]∣∣…e::=x|ee|[e]|… …


2
Eksilerin hangi özelliği kuyruk özyineleme modulo eksilerini ortadan kaldırmaya izin verir?
Bir çağrının doğrudan sonucunu veren işlevlerin yinelemeli döngüler olarak yeniden yazılabileceği temel kuyruk özyineleme ortadan kaldırılması fikrine aşinayım . foo(...): # ... return foo(...) Ayrıca, özel bir durum olarak, özyinelemeli çağrı bir çağrıya sarılırsa işlevin yeniden yazılabileceğini de anlıyorum cons. foo(...): # ... return (..., foo(...)) Hangi özellik buna consizin …


3
İkili verilerde bir lexer / ayrıştırıcı kullanmak neden bu kadar yanlış?
Bir ayrıştırıcı birleştiricinin aksine lexer / ayrıştırıcılarla sık sık çalışıyorum ve ayrıştırmada hiç ders almayan insanları görüyorum, ikili verileri ayrıştırmayı sor. Tipik olarak veriler sadece ikili değil aynı zamanda içeriğe duyarlıdır. Bu temel olarak sadece bir tip token, bayt için bir token bulunmasına yol açar. Birileri ikili verileri ayrıştırmak için …


3
'Ormansızlaşma' bir programdan 'ağaçları' nasıl kaldırır?
Ormansızlaşmanın aynı anda nasıl bir liste içerdiğini ve ürettiğini anlıyorum (bir katlama ve bir açılma işlevinden - CodeReview'da bu iyi cevaba bakın ), ama bunu ' teknikten ' wikipedia girişi ile 'kaldırma' ağaçlar 'bir programdan. Bir programın sözdizimsel ayrıştırma ağacına nasıl ayrıştırılabileceğini anlıyorum (bu doğru mu?), Ama programların bir tür …

2
LL (k) ve LR (k) dilbilgisi arasında ayrım yapmanın bir yolu var mı?
Son zamanlarda Derleyiciler tasarımı üzerine çalışıyorum. Biri LL gramer, diğeri LR gramer olmak üzere iki tür gramer hakkında bilgi sahibi oldum. Ayrıca her LL dilbilgisinin LL dilbilgisi olan LR olduğunu, LR dilbilgisinin uygun bir alt kümesi olduğunu da biliyoruz. Birincisi yukarıdan aşağıya ayrıştırmada, ikincisi yukarıdan aşağıya ayrıştırmada kullanılır. Fakat verilen …

3
Bu dilbilgisi LL (1) nasıl?
Bu Ejderha Kitabından bir soru. Bu dilbilgisi: S→AaAb∣BbBaS→AaAb∣BbBaS \to AaAb \mid BbBa A→εA→εA \to \varepsilon B→εB→εB \to \varepsilon Soru, bunun LL (1) olduğunu ancak SLR (1) olmadığını nasıl göstereceğini soruyor. LL (1) olduğunu kanıtlamak için, ayrıştırma tablosunu oluşturmaya çalıştım, ama bir çelişki olan bir hücrede birden fazla yapım alıyorum. Lütfen …

1
“CPS” yaklaşımı SML / NJ'deki performansa büyük zarar verdi; muhakeme isteniyor
F # Öğrenme ile ilgili bir yorumda : Diğer programlama dillerini kullanan hangi kitaplar fonksiyonel kavramları öğrenmek için F # 'a çevrilebilir? Makarius şunları söyledi: "CPS" yaklaşımının SML / NJ'deki performansa büyük zarar verdiğini unutmayın. Fiziksel değerlendirme modeli, donanıma dahil edilmiş çok fazla varsayımı ihlal eder. Isabelle / HOL gibi …

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.