Parboiled (Java) - Parboiled (Java)

kaynatılmış kütüphane
Geliştirici (ler)Mathias Doenitz
İlk sürüm12 Kasım 2009; 11 yıl önce (2009-11-12)
Kararlı sürüm
1.3.1 / 24 Haziran 2019; 16 ay önce (2019-06-24)[1]
Depo Bunu Vikiveri'de düzenleyin
YazılmışJava
İşletim sistemiÇapraz platform
LisansApache Lisansı 2.0
İnternet sitesikaynatılmış.org

kaynatılmış açık kaynak Java kütüphane bir Apache Lisansı. Tanımlama desteği sağlar PEG doğrudan Java kaynak kodunda ayrıştırır.

parboiled, genellikle bir alternatif olarak kullanılır düzenli ifadeler veya ayrıştırıcı üreteçleri (sevmek ANTLR veya JavaCC ), özellikle daha küçük ve orta ölçekli uygulamalar için.

Dilbilgisi tanımı için yapıları sağlamanın yanı sıra parboiled tam bir yinelemeli iniş ayrıştırıcı desteği ile soyut sözdizimi ağacı inşaat, ayrıştırma hatası raporlama ve ayrıştırma hatası kurtarma.

Misal

Parboiled ile ayrıştırma ayrı bir lexing aşama ve dilbilgisi tanımı için öğrenilecek özel bir sözdizimi olmaması parboiled özel ayrıştırıcıları hızlı bir şekilde oluşturmayı nispeten kolaylaştırır.

Bunu, basit bir sözde gösterimde bu kurallarla birlikte aşağıdaki klasik "hesap makinesi" örneğini düşünün

İfadeDönem ((‘+’ / ‘-’) Dönem)*
DönemFaktör (('*' / '/') Faktör)*
FaktörNumara / '(' İfade ')'
Numara ← [0-9]+

Parboiled ile bu kural açıklaması doğrudan aşağıdaki Java koduna çevrilebilir:

ithalat org.parboiled.BaseParser;halka açık sınıf Hesap Makinesi genişler BaseParser<Nesne> {    halka açık Kural İfade() {        dönüş Sıra(                Dönem(),                ZeroOrMore(                        Sıra(                                İlki('+', '-'),                                Dönem()                        )                )        );    }    halka açık Kural Dönem() {        dönüş Sıra(                Faktör(),                ZeroOrMore(                        Sıra(                                İlki('*', '/'),                                Faktör()                        )                )        );    }    halka açık Kural Faktör() {        dönüş İlki(                Numara(),                Sıra('(', İfade(), ')')        );    }    halka açık Kural Numara() {        dönüş Bir veya daha fazla(CharRange('0', '9'));    }}

Sınıf, gerçek girdiyi aşağıdaki gibi bir kodla ayrıştırmak için kullanılabilen dil için ayrıştırıcı kurallarını tanımlar (ancak herhangi bir eylem olmadan):

Dize giriş = "1+2";Hesap Makinesi ayrıştırıcı = Kaynatılmış.createParser(Hesap Makinesi.sınıf);Ayrıştırma Sonuç<?> sonuç = ReportingParseRunner.koşmak(ayrıştırıcı.ifade(), giriş);Dize parseTreePrintOut = ParseTreeUtils.printNodeTree(sonuç); Sistem.dışarı.println(parseTreePrintOut);

Ayrıca bakınız

Referanslar

  1. ^ "Değişiklik günlüğü". Kaynatılmış. 24 Haziran 2019. Alındı 7 Ocak 2020.

Dış bağlantılar