Parzone (Java)
Deweloperzy | Mateusz Doenitz |
---|---|
Pierwsze wydanie | 12 listopada 2009 |
Wersja stabilna | 1.3.1 / 24 czerwca 2019
|
Magazyn | |
Napisane w | Jawa |
System operacyjny | Międzyplatformowe |
Licencja | Licencja Apache 2.0 |
Strona internetowa |
parboiled to otwarta biblioteka Java wydana na licencji Apache . Zapewnia wsparcie dla definiowania PEG bezpośrednio w kodzie źródłowym Java.
parboiled jest powszechnie używany jako alternatywa dla wyrażeń regularnych lub generatorów parserów (takich jak ANTLR lub JavaCC ), zwłaszcza w mniejszych i średnich aplikacjach.
Oprócz dostarczania konstrukcji do definicji gramatyki, parboiled implementuje kompletny parser rekurencyjny z obsługą konstrukcji abstrakcyjnego drzewa składniowego , raportowaniem błędów analizy i naprawą błędów analizy.
Przykład
Ponieważ parsowanie za pomocą parboiled nie wymaga oddzielnej fazy leksykalnej i nie ma specjalnej składni do nauczenia się definicji gramatyki, parsowanie sprawia, że stosunkowo łatwo jest szybko zbudować niestandardowe parsery.
Rozważmy następujący przykład klasycznego „kalkulatora”, z tymi regułami w prostej pseudonotacji
Wyrażenie ← Wyrażenie (( '+' / '-' ) Wyrażenie ) * Wyrażenie ← Czynnik (( '*' / '/' ) Czynnik ) * Czynnik ← Liczba / '(' Wyrażenie ')' Liczba ← [ 0-9 ] +
Za pomocą parboiled ten opis reguły można przetłumaczyć bezpośrednio na następujący kod Java:
import org.parboiled.BaseParser ; klasa publiczna CalculatorParser rozszerza BaseParser <obiekt> { publiczne wyrażenie reguły () { return Sequence ( Term ( ), ZeroOrMore ( Sekwencja ( FirstOf ( '+' , ' -' ), Term () ) ) ); } Reguła publiczna
Term () { return Sekwencja ( Czynnik (), ZeroOr Więcej ( Sekwencja ( Pierwszy Z ( '*' , '/' ), Czynnik () ) ) ; } public Rule Factor () { return FirstOf ( Number (), Sekwencja ( '(' , Wyrażenie (), ')' )
); } public Number Rule () { return OneOrMore ( CharRange ( '0' , '9' )); } }
Klasa definiuje reguły parsera dla języka (jeszcze bez żadnych akcji), których można użyć do przeanalizowania rzeczywistych danych wejściowych za pomocą kodu takiego jak ten:
Wejście ciągu znaków = "1+2" ; CalculatorParser parser = parowany . createParser ( CalculatorParser . klasa ); ParsingResult <?> wynik = ReportingParseRunner . uruchom ( parser . wyrażenie (), wejście ); Ciąg parseTreePrintOut = ParseTreeUtils . printNodeTree ( wynik
); systemu . na zewnątrz println ( parseTreePrintOut );
Zobacz też
Linki zewnętrzne
- Oficjalna strona internetowa parboiled
- Przykład kompletnego parsera Java 6 napisanego za pomocą parboiled