Parzone (Java)

spalona biblioteka
Deweloperzy Mateusz Doenitz
Pierwsze wydanie 12 listopada 2009 ; 13 lat temu ( 12.11.2009 )
Wersja stabilna
1.3.1 / 24 czerwca 2019 ; 3 lata temu ( 2019-06-24 )
Magazyn
Napisane w Jawa
System operacyjny Międzyplatformowe
Licencja Licencja Apache 2.0
Strona internetowa parzone .org

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