Ask Your Question
1

Atributovy preklad - jazyk zoznamov

asked 2014-12-31 19:01:55 +0100

Lukas Nagy gravatar image

updated 2015-01-01 22:12:19 +0100

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?

edit retag flag offensive close delete

Comments

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 )edit

Moje 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

1 Answer

Sort by » oldest newest most voted
1

answered 2015-01-02 17:53:21 +0100

Viktor Chlumský gravatar image

updated 2015-01-02 17:57:42 +0100

Pokud vím, tak vstupní symboly (terminály) mohou mít pouze syntetizované atributy, ne dědičné, tzn. lze použít jejich hodnotu k výpočtu něčeho jiného, ale nelze ji určovat. Šlo by ale místo toho přidat výstupní symbol, třeba $x$, do kterého se výsledek uloží:

$Z \rightarrow ;x$ | $x.pocet := Z.pocet$

APG bude sice regulární, ale počet prvků seznamu bude v atributu výstupního symbolu a ne počátečního neterminálu, takže to dělá trochu něco jiného.

edit flag offensive delete publish link more

Your answer

Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!

Add answer

[hide preview]

Question tools

Follow
1 follower

Stats

Asked: 2014-12-31 19:01:55 +0100

Seen: 130 times

Last updated: Jan 02 '15