2010-11-27 21 views
7

C++ ayrıştırma sorunları iyi bilinmektedir. Sadece sözdizimine göre ayrıştırılamaz, LALR olarak yapılamaz (terim ne olursa olsun, dil kuramcısı değilim), dil bilgisi bir zillion sayfasıdır, vs. Bu ve diğer nedenler I Kişisel projelerim için alternatif bir dile karar verdim.Va ++ C++ ile karşılaştırıldığında ayrıştırmak için bir akıl dili mi?

Vala iyi dil gibi görünüyor. C++ üzerinde pek çok gelişme sağlasa da, ayrıştırmak zahmetli mi? Veya derleyiciler, kaynak analizörleri ve diğer araçlar için ayrıştırıcılar oluşturmak için uygun, düzgün, makul uzunlukta bir dilbilgisi veya bazı mantıksal açıklamaları var mı?

Cevap ne olursa olsun, bu Genie alternatif sözdizimi için gider?

(Ben de D ve diğer post-C++ olmayan VM diller hakkında daha az yoğun olsa merak ediyorum.)

+2

Özellikler bir proje için bazı özel dil seçmek için iyi bir neden, ama o dil ayrıştırmak için ne kadar zor ne fark eder? (Kişisel projeniz söz konusu dil için bir derleyici yazmıyorsa). Bu notta C++, Java ve C# gibi bir LR (1) dilbilgisi değildir ve potansiyel olarak sonsuz bir görünüm içerebilir. – birryree

+0

Vana 'C++' dan daha iyi olmalı. Java'nın gerçekten aklı başında olduğunu biliyorum, Java'da yazılmış bir Java Ayrıştırıcısını kullandım ve bir derleyici-derleyici tarafından EBNF'deki gramerden doğrudan oluşturdum. – Lagerbaer

+0

Err .. it * sözdizimine göre ayrıştırılabilir, en azından herhangi bir dil bu şekilde düşünülebilir (tabii ki, tanımlayıcılar gibi şeyler teknik olarak bağlama hassastır, ancak çoğu dilde ortaktır). Evet, dilbilgisi LALR (1) değil, ama elbette parsable. Öte yandan, ayrıştırmadaki zorluk, bir dili seçme konusundaki temel ölçütünüz olmamalıdır - belli bir dil için popülerlik için söylenecek çok fazla şey (ve bu nedenle kütüphane ve benzeri). –

cevap

7

C++ ortak ayrıştırmak için ( en karmaşık değilse ) programlama dili en karmaşık biridir kullanın. Özellikle zorluk, isim arama kuralları ve şablon örnekleme kurallarıdır. C++, bir LALR (1) ayrıştırıcısı (Bison ve Yacc tarafından oluşturulan ayrıştırıcılar gibi) kullanılarak ayrıştırılamaz, ancak her şey ayrıştırılabilir (her şeyden önce, insanlar her gün C++ ayrıştırma sorunu olmayan ayrıştırıcılar kullanır). daha geçenlerde bir el yazılı özyinelemeli iniş ayrıştırıcı ile değiştirildi önce Öte yandan

) ( Aslında, G ++ erken sürümleri yorumları görmek Bison Genelleştirilmiş LR ayrıştırıcı çerçevesinde üstünde Aslında değil inşa edildi) Ben Vala'nın C++ üzerinden ne tür geliştirmeler yaptığına emin değilim. Diller aynı hedefleri gerçekleştirmeye çalışır. Öte yandan, muhtemelen Vala arayüzleri ile yazılmış GTK + 'nın çok dışında bir yer bulamayacaksınız. Böyle bir dili kullanma noktasını gerçekten yenen diğer herşeye C arayüzleri kullanacaksınız.

C++ 'yı karmaşıklığı nedeniyle sevmiyorsanız, Objective-C'yi düşünmek iyi bir fikir olabilir, çünkü bu basit bir C uzantısıdır (Vala gibi), ancak çok daha büyük bir topluluğu vardır. Programcılar, Mac arazisindeki her şey için temel oluşturduğundan emin olmanız için. dili kendisi ayrıştırma zorluğu bir programcı dili kullanmak için önemsememe olması gerekenle ilgisi var neden

Son olarak, görmüyorum. Sadece 2 sentim.

+0

+1, ayrılabilirlik ortalama geliştirici için bir endişe bile olmamalıdır. –

+0

g ++, Bison'un Genelleştirilmiş LR çözümleyici altyapısına dayandığından şüphe duyuyordum: bu, 2002'de sürüm 1.5'e eklenmiştir. AFAIK, 3.4 öncesi ayrıştırıcı, C++ işlemek için daha fazla veya daha az temiz kesicilere dayanan LALR'dir. – AProgrammer

+0

@AProgrammer: Korkarım anlamadım. C++, sadece LALR kullanılarak ayrıştırılamaz. Bunun için nasıl bir "kesmek" olabilir? –

6

Oldukça basit. Libvala'yı kendi yazmak yerine, ayrıştırma, anlamsal analiz ve kod oluşturma yapmak için kullanabilirsiniz.

İlgili konular