İnsanlar derken onlar "oluşturmadeneyimine" tarafından gerçekten sadece aracı "araya" ve ne anlama geldiğini, "X oluşturma değil" ne ve nasıl tam olarak "X" ne bağlı olarak çok farklı olabilir onları biraraya koydu.
Ayrıca, "oluşturma" derken, biraz farklı şeyler ifade edebilirler:
- İki X'i bir araya getiremezsin, dönem.
- Sen edebilirsiniz birlikte iki Xs koymak, ancak sonuç bir X olmayabilir (IOW: X edilmez kompozisyon altında kapalı .)
- İki X'i bir araya getirebilirsiniz, ancak ortaya çıkan X beklediğiniz şekilde çalışmayabilir.
# 1 için bir örnek, tarayıcı / lexer içeren ayrıştırıcılardır. "Tarayıcılar / lexers oluşturulmaz" ifadesini duyabilirsiniz. Bu aslında doğru değil. Demek istedikleri "ayrı bir lexing aşaması kullanan ayrıştırıcı oluşturma" dır.
Neden ortak ayrıştırıcılar oluşturmak istersiniz? Peki, JetBrains, Eclipse Foundation, Microsoft veya Embarcadero gibi bir IDE satıcısı olduğunuzu ve bir web çerçevesi için bir IDE oluşturmak istediğinizi hayal edin. Tipik web geliştirmede, genellikle dilleri karıştırıyoruz. <script>
ECMAScript içeren öğeler içeren HTML dosyalarınız ve<style>
CSS içeren elemanlar. HTML, bazı programlama dili ve bazı şablon dili metasyntax içeren şablon dosyalarınız var. "Python", "Bir şablona gömülü Python", "CSS", "HTML içinde CSS", "ECMASCript", "HTML içinde ECMAScript", "HTML", "HTML içinde farklı sözdizimi vurgulayıcıları yazmak istemezsiniz Bir şablon "ve diğerleri ve diğerleri. Python için, biri HTML için, biri şablon dili için bir sözdizimi vurgulayıcısı yazmak ve üçünü de bir şablon dosyası için bir sözdizimi vurgulayıcısı olarak oluşturmak istiyorsunuz.
Bununla birlikte, bir lexer tüm dosyayı yalnızca bir dil için anlam ifade eden bir belirteç akışına ayrıştırır. Diğer dilin ayrıştırıcısı, Lexer'in geçtiği belirteçlerle çalışamaz. Örneğin, Python ayrıştırıcıları tipik olarak, lexer'ın girintiyi takip edeceği INDENT
ve DEDENT
belirteç akışının içine sahte ve jetonlar enjekte edecek şekilde yazılır , böylece Python'un sözdizimi gerçekte olmasa bile ayrıştırıcının bağlamsız kalmasına izin verir. Bununla birlikte, bir HTML lexer, HTML'de bir anlamı olmadığı için boşlukları tamamen görmezden gelecektir.
Bununla birlikte, basitçe karakter okuyan, tarayıcısız bir çözümleyici, karakter akışını farklı bir çözümleyiciye aktarabilir;
# 2 için bir örnek, içinde SQL sorguları bulunan dizelerdir. Her biri sözdizimsel olarak doğru bir SQL sorgusu olan iki dizginiz olabilir, ancak iki dizgiyi birleştirirseniz, sonuç sözdizimsel olarak doğru bir SQL sorgusu olmayabilir. Biz gibi sorgu cebirlerini İşte bu yüzden en ARel
, do oluşturma.
Kilitler # 3 örneğidir. Kilitleri olan iki programınız varsa ve bunları tek bir programda birleştirirseniz, hala kilitleri olan bir programınız vardır, ancak iki orijinal program tamamen doğru olsa bile, kilitlenme ve yarışsız özelliği. Kilitlerin doğru kullanımı, tüm programın genel bir özelliğidir ve programları oluştururken korunmayan bir özelliktir. Bu örnek, işlemler için farklıdır yapmak oluşturma deneyimini. İşlemleri doğru kullanan bir program, böyle bir programla oluşturulabilir ve işlemleri doğru bir şekilde kullanan birleşik bir program sunar.