Borneq

Untitled

Sep 9th, 2023
35
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.80 KB | None | 0 0
  1. Parsery LL(k)
  2.  
  3. W tym artykule przyjrzymy się parserom LL. Zarówno LL(1) podglądającemu jeden symbol, jak i LL(k) biorącemu pod uwagę k symboli. Parsery LL(k) będziemy generować w sposób „kanoniczny” – poprzez generowanie zbiorów podglądanych symboli długości k>1 („kanoniczny” w cudzysłowie, takie określenie w literaturze jest na określenie pewnego typu parserów LR, nie spotkałem natomiast niczego takiego dotyczącego LL)
  4. Metody analizy syntaktycznej dzielą się na :
  5. - analizę zstępującą, produkującą lewostronne wyprowadzenia – parsery LL (Left-to-Right, Leftmost Derivation)
  6. - analizę wstępującą, choć również przetwarza wejście od lewej do prawej, to produkującą prawostronne wyprowadzenie – parsery LR (Left-to-Right, Rightmost Derivation)
  7.  
  8. Historycznie rzecz biorąc, parsery LR, które były generowane maszynowo, np. z użyciem Bisona (który obecnie obsługuje również GLR) były bardziej zaawansowane i obsługiwały większą klasę gramatyk. Parsery LL były głównie tworzone ręcznie dla bardzo prostych gramatyk. Obecnie np. ANTLR używa bardzo zaawansowanego i wydajnego typu parserów z podglądem dowolnej liczby symboli, jednak w tym artykule nie będę się nim zajmował, zamiast tego, będzie poświęcony podstawom oraz pewnej metodzie zwiększenia liczby podglądanych symboli.
  9.  
  10. Jakkolwiek dla danego k, parsery LL pokrywają mniejszą klasę języków, jednak ich zalety to:
  11. - rekurencyjna implementacja za pomocą procedur
  12. - naturalne odzwierciedlenie gramatyki
  13. - zrozumiały kod wygenerowanego parsera
  14. - zwykle wcześniejsza detekcja błędów
  15. - proste drzewa parsowania,
  16.  
  17. W parserach LL często dochodzi do konfliktów LL nawet dla typowych prostych gramatyk, które jednak można rozwiązać przez automatyczną modyfikację gramatyki.
  18.  
  19.  
Advertisement
Add Comment
Please, Sign In to add comment