Kihagyás

Szintaktikus elemzés

2 fő komponens:

  • elemző
  • szintézis

Redukciós lépés

Alulról felfelé elemzés

1-------

a  b  c

2-------

A
|
a  b  c

3-------

A   B
|  / \
a  b  c

4-------

  S
 / \
A   B
|  / \
a  b  c
  • \(abc\)
  • \(abc\Leftarrow Abc\)
  • \(abc\Leftarrow Abc \Leftarrow AB\)
  • \(abc\Leftarrow Abc \Leftarrow AB \Leftarrow S\)

  • Terminálisból indulva megyünk a startszimbólum felé
  • Az input feldolgozása jobbról barla történik

A legutolsó felbontható bal elemet keressük

\[ \boxed{ \;apple,banana,pear\; } \; \underrightarrow{\text{Szintaktikus elemző}} \; \boxed{ \,eveve\, } \;\underrightarrow{\text{Szemantikus elemző}}\; $$ $$ \boxed{ \begin{CD} @. @. @. S \\ @. @. @. @VVV \\ @. @. @. N \\ @. @VVV @. @VVV @VVV \\ @. N \\ @VVV @VVV @VVV \\ N \\ @VVV \\ e @.v @. e @. v @. e \end{CD} } \]

Shift-reduce function

Léptetés

A következő tokent elhelyezzük a verem tetjére two way arrow

Redukálás

A szabály jobboldalának helyettesítése a szabály bal oldalával a veremben, eközben a szintaxisfa bővül

Na most melyik?

  • Erre nem tér ki az előadás lmao

Lehetséges hibajelentések

  • Deklarálatlan változó
    • int main(){cout << x;}
    • tf is x
  • Hatókörön kívüli használat
  • Privát adattag elérése
  • Újradeklarált változó
  • Tíushiba elfedés miatt

Tokenekhez csatolt információ

A tokensorozat elegendő információt tartalmaz ahoz hogy szintakszisfát lehessen építeni

int x;
cout << x;

$ \underrightarrow{\text{lexikáls elemző}} \; \boxed{\text{azonosító, azonosító, utasításvég, azonosító, operátor azonosító, utasításvég}} $

A lexikális elemzőnek nem lesz elég a tokensorozatot visszaadni, további információk kellenek

  • Deklarált változó neve, típusa
  • Operátor változói, amikre alkalmazva lett

Szimbólumtábla

void f(int p){
    int x;
    cin >> x;
    cout << x + p + y
    int x;
}
Név Fajta Típus Deklaráció Használat
"f" függvény int -> void 1.sor 6. oszlop
"p" paraméter int 1.sor 12. oszlop 4. sor 13. oszlop
"x" lok. változó int 2. sor 7. oszlop 3. sor 10. oszlop ; 4. sor 11. oszlop
  • Szemantikus hiba: y nem definiált
  • Szemantikus hiba: x újradefiniált

Block index vektor

  • Tárolja, hogy az utolsó hatókörben mik voltak definiálva
  • A hatókör megszűnésével a következő indexig mindent törlünk
  • Innentől a szimbólum értelmezése reverse-order történik