Atributovy preklad - jazyk zoznamov
Riesim priklady na atributovy preklad a pri jednom som velmi nepochopil vysvetlenie riesenia prikladu.
Je dan jazyk seznamu, ve kterych se vyskytuji identifikatory oddelene lomitky. Seznam je ukoncen strednikem. Uvedeme regularni atributovou prekladovou gramatiku, ktera popisuje zpusob vypoctu poctu prvku seznamu.
Gramatika mala v skriptach tvar $$G=(\{ S,Z\},\{id,;,/\},P,S)$$ a pravidla boli
| Syntax | Semantika |
|----------------------|------------------------|
| $ S\rightarrow idZ $ | $ S.pocet:=Z.pocet+1 $ |
| $ Z\rightarrow ; $ | $ Z.pocet:=0 $ |
| $ Z\rightarrow /S $ | $ Z.pocet:=S.pocet $ |
V rieseni prikladu sa hovori o nutnosti pouzit syntetizovany atribut avsak nerozumiem preco sa do neda spravit i dedicnymi atributmi. Moje riesenie pouziva dedicne atributy syntax je rovnaka, akurat mierne pozmenena semantika:
| Syntax | Semantika |
|----------------------|----------------------|
| $ S\rightarrow idZ $ | $ Z.pocet:=S.pocet $ |
| $ Z\rightarrow ; $ | $ ;.pocet:=Z.pocet $ |
| $ Z\rightarrow /S $ | $ S.pocet:=Z.pocet +1$ |
Pociatocna hodnota atributu $ S.pocet:=1 $ Robim niekde chybu alebo sa k tomu da pristupovat i takto a zostala by to teda regularna atributova prekladova gramatika?
Výsledkem má být atribut pocet středníku, je to tak? Nebránil bych se použít výstupní symbol. Jinak by to fungovalo, pokud nevadí, že výsledkem bude vždycky 1 ;-)
Ondřej Guth ( 2015-01-01 20:25:02 +0100 )editMoje chyba, zabudol som pridat +1 a mal som prehodene neterminali v poslednom semantickom pravidle. Teraz by to mohlo pocitac pocet identifikatoru?
Lukas Nagy ( 2015-01-01 22:11:27 +0100 )edit