Alt-üles süntaksianalüüsi algoritmid otsivad igal sammul loetavas stringis (töö algamisel on see analüüsitav, ainult terminalidest koosnev string, töö käigus tekib sinna ka mitteterminale) mingi produktsiooni aluse, s.t. parema poole, ja taandavad (redutseerivad) selle siis vastava produktsiooni vasakul pool olevaks mitteterminaliks. Tavaliselt püütakse asendada analüüsitavas stringis esimene (vasakult paremale lugedes) leitud alus. Kogu string peaks lõpuks taanduma grammatika algussümboliks, kuid ka siin võib vajadus tagurdamiseks (backtracking), kui analüüsitavas stringis ei ole enam ühtki alust.
Näide 1. Olgu grammatika G
S a S b S | aS |c
ja analüüsitav sõna aacbc (suured tähed on mitteterminalid, väikesed - terminnalid).Analüüs algab
situatsioonis (# on
analüüsitava sõna lõpumarker):
Vasakult paremale lugedes esimene alus on c, mis redutseeritakse mitteterminaliks S; edasi analüüsitakse stringi aaSbc
Stringis aaSbc esimene alus on aS, mis redutseeritakse mitteterminaliks S; edasi analüüsitakse stringi aSbc
Stringis aSbc esimene alus on aS, mis redutseeritakse mitteterminaliks S; edasi analüüsitakse stringi Sbc
Nüüd saame aluse credutseerimisel stringi SbS, mis ei sisalda enam yhtegi alust, seega tuleb teha tagurdus (backtracking) ja proovida eelmisel sammul asendada mitte vasakult-paremale esimene, vaid mõni järgmine alus.
Avaldis Term | Term +
Avaldis | Term - Avaldis
Term Tegur | Tegur * Term | Tegur / Term
Tegur Ident | Const | (Avaldis)
Avaldis Term
Avaldise_lõpp
Term Tegur Termi_lõpp
Tegur Ident | Const | (Avaldis)
Avaldise_lõpp + Avaldis | - Avaldis
|
Termi_lõpp * Term | / Term |
Kumb grammatika sobib ülalt-alla analüüsiks paremini?