SORU
16 Mayıs 2010, Pazar


lexers vs ayrıştırıcıları

Lexers ve ayrıştırıcıları gerçekten teoride bu kadar farklı ?

Moda düzenli ifadeler nefret gibi görünüyor: coding horror, another blog post.

Ancak, popüler lexing temel araçlar: pygments, geshi veya düzenli ifadeler kullanmak prettify,. Lex bir şey gibi geldi...

Lexing yeterli olduğunda, zaman ebnf ile ilgili ihtiyacınız var mı ?

Herkes belirteçleri bizon veya antlr ayrıştırıcı jeneratör ile bu lexers tarafından üretilen kullandı?

CEVAP
1 EYLÜL 2010, ÇARŞAMBA


Ne ayrıştırıcıları ve lexers ortak:

  1. Okuyorlarsembollerbazıalfabekendi giriş.atomdil çözümleyici tarafından anlaşılması için/lexer.
    • Bu lexer için sembolleri: ASCII karakterler.
    • Çözümleyici için simgeleri: kendi dilbilgisi terminal sembolü olan belirli simgeleri,.
  2. Bu analiz ederlersembollerve onları maç için deneyindilbilgisidil anladılar.
  3. Dilbilgisi lexers tarafından anlaşılan: düzenli dilbilgisi (Chomsky seviyesi 3).
  4. Dilbilgisi ayrıştırıcıları tarafından anlaşılan: bağlam serbest dilbilgisi (Chomsky Düzey 2).
  5. Onlar takınanlambilimbuldukları dil parçalara (anlamına gelir).
    • Lexers sınıflandırmada anlam yüklerlexemesözel olarak (giriş sembolleri dizeleri)belirteçleri. E. g. Tüm bu lexemes: , , *, **<===0 3* gizli olacak "operatör" C/C token lexer.
    • Ayrıştırıcıları özel olarak giriş belirteçleri (cümle) dizeleri sınıflandırmada anlam yüklernonterminalsve binaayrıştırma ağacı. E. g. tüm bu token strings: , *, *6[number][operator][number][id][operator][id] ayrılacaktır "ifadesi" C/C parser tarafından Terminal dışı.
  6. Bazı ek anlam (veri) tanınan öğeleri ekleyebilirler. E. g. bir lexer bir karakter dizisini düzgün bir sayı oluşturan tanıdığında, ikili değerine dönüştürmek ve "sayı" token. ile saklayabilirsiniz Bir ayrıştırıcı bir ifade tanımak zaman, benzer şekilde, onun değerini hesaplamak ve "" sözdizimi ağacı. düğüm ifade ile saklayabilirsiniz
  7. Hepsinin çıktıya uygun üretmekcümlelerdili tanır.
    • Lexers üretmekbelirteçleriolan ., ^em>cümlelernormal diltanır. Her belirteç bir iç sözdizimi (gerçi seviye 3, seviye 2) olabilir, ama bu onları okur bir çıkış verileri için bir önemi yok.
    • Ayrıştırıcıları üretmeksözdizimi ağaçlarıtemsil ediyor., ^em>cümlelerbağlam-ücretsiz diltanır. Genellikle bütün belge/kaynak dosya doğru, çünkü sadece bütün belge/kaynak dosyası için bir büyük ağaçcümleonlar için. Ama çözümleyici çıktısı üzerinde sözdizimi ağaçları bir dizi üretmek olamazdı neden hiçbir sebep yok. E. g. SGML etiketleri düz metin içine yapışabilir kabul eden bir ayrıştırıcı olabilir.tokenizesimgeleri bir dizi SGML belge: [TXT][TAG][TAG][TXT][TAG][TXT]....

Gördüğünüz gibi, ayrıştırıcıları ve tokenizers çok ortak noktası var. Bir çözümleyici olabilir tokenizer için diğer ayrıştırıcı, okur kendi giriş simgeleri gibi simgeler arasından kendi alfabesi (belirteçleri sadece bazı sembolleri alfabesi) de öyle cümleler bir dil olabilir alfabetik semboller bazı diğer, daha yüksek seviyeli bir dil. Örneğin, eğer * - sembolleri alfabe M ("Mors alfabesi sembolleri"), sonra inşa bir çözümleyici olan tanıdığı dizeleri bu noktalar ve çizgiler gibi harfler kodlanmış olarak Mors kodu. Dilinde cümleler "Mors Kodu" olabilirbelirteçleribaşka bir çözümleyici için, olan bubelirteçleridili atomik semboller (örneğin, "İngilizce Kelimeler" dili). Ve bu "Kelimeler" belirteçleri olabilir (alfabenin sembolleri) "İngilizce Cümleler" dil. anlayan bazı üst düzey çözümleyici İngilizcesi Vetüm bu dillerin dilbilgisi karmaşıklığını gösterir. Hiçbir şey daha fazla.

Bunların hepsi hakkında ne "Chomsky'nin dilbilgisi düzeyleri"? Evet, Noam Chomsky onların karmaşıklığına bağlı olarak: dört düzeyde gramer gizli

  • Seviye 3: Düzenli gramerleria,b), onların birbirine bağlanması (ab,aba,bbb etd.), ya da alternatifleri (*16 örneğin*).sözdizimi iç içeörneğin, eşleşen parantez/düzgün iç içe (()()(()())),/biçim kodları etiketleri, iç içe bloklar vs. iç içe geçmiş HTML. Bununla başa çıkmak için devlet otomata sonsuz sayıda devletler sonsuz iç içe düzeyleri çok ele olmalı.
  • Seviye 2: Bağlam-ücretsiz gramerleriiçeriğe duyarlısözdizimi. E. g. bir bağlamda 18* *ve bir ifade varsa x Bu bir değişken adı olabilir, ve diğer bağlamda bir işlev vb bir isim olabilir.
  • Seviye 1: bağlama duyarlı gramerleri
  • Seviye 0: Sınırsız gramerleri

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • androidandme

    androidandme

    10 Mart 2009
  • BASS212M

    BASS212M

    15 Temmuz 2009
  • WoodysGamertag

    WoodysGamert

    17 Aralık 2009