PackCC - PackCC - Wikipedia

PackCC
Geliştirici (ler)Arihiro Yoshida
YazılmışC
İşletim sistemiÇapraz platform
TürAyrıştırıcı oluşturucu
LisansMIT Lisansı
İnternet sitesigithub.com/ arithy/ packcc

PackCC bir ayrıştırıcı oluşturucu için C. Başlıca özellikleri aşağıdaki gibidir:

Bir çıktı ayrıştırıcısının dilbilgisi bir PEG'de (Ayrıştırma İfadesi Dilbilgisi) tanımlanabilir. PEG bir yukarıdan aşağıya ayrıştırma dili ve şuna benzer Düzenli ifade dilbilgisi. Aşağıdan yukarıya ayrıştırma diliyle karşılaştırıldığında, örneğin Yacc Birincisi, PEG çok daha sezgiseldir ve belirsiz olamaz. PEG gerektirmez jetonlama ayrı bir adımdır ve belirteçleme kuralları diğer dilbilgisi kurallarıyla aynı şekilde yazılabilir.

Oluşturulan ayrıştırıcı, girdileri paketleyici ayrıştırma yoluyla çok verimli bir şekilde ayrıştırabilir. Packrat ayrıştırması, yinelemeli iniş ayrıştırma kullanılarak hızlandırılan algoritma hafızaya alma. Packrat ayrıştırması kullanılarak, herhangi bir girdi doğrusal zamanda çözümlenebilir. Bununla birlikte, bu olmadan, ortaya çıkan ayrıştırıcı, sınırsız ileriye bakma kapasitesi nedeniyle en kötü durumda üstel zaman performansı sergileyebilir.

Yaygın paket çözümleyicilerin aksine, PackCC doğrudan ve dolaylı olarak destekleyebilir sol yinelemeli dil bilgisi kuralları.[1] Bu, gramer kurallarını çok daha sezgisel hale getirir.

Oluşturulan kod güzelleştirilir ve olabildiğince kolay anlaşılır. Aslında, birçok goto ifadesi kullanır, ancak kontrol akışları, diğer bazı ayrıştırıcı üreteçleri tarafından üretilen spagetti fırtınalarına göre çok daha izlenebilirdir.

PackCC'nin kendisi MIT lisansı altındadır, ancak üretilen kod herhangi bir lisans altında dağıtılabilir veya özel mülk yazılımda kullanılabilir.

Giriş dosyası örneği

Masaüstü hesap makinesi. Sol yinelemeli dilbilgisi kurallarının dahil edildiğini unutmayın.

%önek "hesap"Beyan <- _ e:ifade _ EOL { printf("answer =% d n", e); }           / ( !EOL . )* EOL      { printf("hata n"); }ifade <- e:dönem { $$ = e; }dönem <- l:dönem _ '+' _ r:faktör { $$ = l + r; }      / l:dönem _ '-' _ r:faktör { $$ = l - r; }      / e:faktör                { $$ = e; }faktör <- l:faktör _ '*' _ r:birli { $$ = l * r; }        / l:faktör _ '/' _ r:birli { $$ = l / r; }        / e:birli                  { $$ = e; }birli <- '+' _ e:birli { $$ = +e; }       / '-' _ e:birli { $$ = -e; }       / e:birincil     { $$ = e; }birincil <- < [0-9]+ >               { $$ = Atoi($1); }         / '(' _ e:ifade _ ')' { $$ = e; }_      <- [ \t]*EOL    <- ' n' / '\r\n' / ' r' / ';'%%int ana() {    calc_context_t *ctx = calc_create(BOŞ);    süre (calc_parse(ctx, BOŞ));    calc_destroy(ctx);    dönüş 0;}

Notlar

  1. ^ "Packrat Ayrıştırıcılar Sol Özyinelemeyi Destekleyebilir" A. Warth, J. R. Douglass ve T. Millstein tarafından yazılmıştır.

Dış bağlantılar