Pok-10-wyk-Slajd31
Atrybuty - analizator składniowy
Wartości atrybutów symboli nieterminalnych są natomiast obliczane w trakcie redukcji przy pomocy akcji semantycznych wpisywanych na końcu prawej strony produkcji.
W przypadku braku akcji wykonywana jest akcja domyślna - kopiowanie $$=$1. Taka postać akcji wynika z samej zasady wykorzystywania stosu w parserze – w trakcie redukcji zastępujemy prawą stronę produkcji symbolem z lewej strony, a zatem – przy braku innych instrukcji – atrybut nieterminala po lewej stronie ($$) wypada w tej samej komórce stosu co atrybut najbardziej lewego symbolu znajdującego się po prawej stronie produkcji ($1).
Akcje są modyfikowane przez YACCa w trakcie generowania parsera, wszystkie odwołania do atrybutów przeliczane są na odpowiednie odwołania do stosu atrybutów. Szczegóły implementacyjne są w zasadzie (poza zaawansowanym debugowaniem parsera) nieistotne dla użytkownika i należy unikać polegania na nich – skorzystanie z nich wiąże nas z konkretną implementacją YACCa (a czasami nawet konkretną wersją).
Z punktu widzenia użytkownika ważne jest jednak, że stos jest implementowany zwykle jako tablica (np. MKS LEX & YACC, Bison) o statycznym rozmiarze (MKS – 150, Bison – 200) a w razie konieczności modyfikując szkielet parsera można te wartości zmienić.
Domyślne wartości zazwyczaj wystarczają do przetworzenia typowych gramatyk (należy zwrócić uwagę na długość form zdaniowych, a w szczególności na prawostronną rekurencję).
Niektóre analizatory (np. BYACC) pewnym kosztem wydajności są w stanie dynamicznie zwiększyć rozmiar stosu w trakcie działania programu.