Szintaktikus elemzés
2 fő komponens:
- elemző
- szintézis
Redukciós lépés
Alulról felfelé elemzés
- \(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
$ \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
| 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