chyba v gramatice?

Úvodní kurz překladačů se soustřeďuje zejména na teoretické i praktické základy konstrukce přední části překladače. Součástí předmětu je i cvičení zaměřující se na základy práce s nástroji pro konstrukci překladačů. Po absolvování tohoto kurzu bude posluchač schopen sestrojit vlastní překladač do mezikódu nebo jiného jazyka.
Uživatelský avatar
Tacoud
Donátor
Donátor
Příspěvky: 53
Registrován: 16. 9. 2005 08:38
Typ studia: Informatika Bc.
Bydliště: Mladá Boleslav
Kontaktovat uživatele:

chyba v gramatice?

Příspěvek od Tacoud »

Ahoj, při testování du5-adam-t0.mls jsem narazil na zajímavý problém. Příkaz

Kód: Vybrat vše

i:= -1 + 3; { 2 { <--- pozor ! } }
mi neuloží do proměnné hodnotu 2, ale -4.
Přijde mi, že je chyba v zadané gramatice, daný výraz se podle ní může rozložit pouze takto:

Kód: Vybrat vše

-1 + 3  ~  jedn. vyraz ~ - (TERM + TERM)
Je to tak, nebo mi něco uniká?
Spojaři všech zemí, proletujte se!
banan
Matfyz(ák|ačka) level I
Příspěvky: 40
Registrován: 14. 6. 2005 14:50
Typ studia: Informatika Bc.
Bydliště: Troja

Re: chyba v gramatice?

Příspěvek od banan »

Z priameho prepisu obrazkovej gramatiky sa vyraz "-1+3" vyhodnocuje jednoduchsie ako "-4", ale "-1+3" musi byt logicky "2". Obrazkovu gramatiku chapem ako lubovolnu inu bezkontextovu gramatiku - tj pravidla, ktore generuju slova patriace do jazyka. Vyznam slovam dava az semanticky popis jazyka (specifikacia), ktory nikde nenajdes, tazke sa musis spolahnut na zdravy sedliacky rozum, a podla neho vyrazy spravne vyhodnocovat. Napr. kde je napisane, ze 'mod' je asociativny zlava? Z obrazku to nevycitas, ale tak nejako sme si vsetci tipli, ze to tak naozaj bude ;-).

Btw, upravit gramatiku tak, aby pocitala "-1+3" spravne, nie je tazke - staci si uvedomit, kedy sa musi unarne minus aplikovat a do tohto pravidla vyskyt minuska pridat.

Spoiler alert! Necitaj dalej, ak si chces gramatiku upravit sam bez napovedy.
Hint 1: prvy term moze obsahovat unarne minus
Hint 2: pozri sa do pravidla zoznam_termov a hlavne na jeho nerekurzivnu cast
Hint 3: nerekurzivnou castou myslim generovanie prveho termu ;-)
Uživatelský avatar
Tacoud
Donátor
Donátor
Příspěvky: 53
Registrován: 16. 9. 2005 08:38
Typ studia: Informatika Bc.
Bydliště: Mladá Boleslav
Kontaktovat uživatele:

Re: chyba v gramatice?

Příspěvek od Tacoud »

Díky za nakopnutí správným směrem :)
Spojaři všech zemí, proletujte se!
Odpovědět

Zpět na „SWI098 Principy překladačů“