2008/09 - DU5

Ú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.
Pz
Matfyz(ák|ačka) level I
Příspěvky: 20
Registrován: 24. 1. 2006 12:20
Typ studia: Informatika Bc.

2008/09 - DU5

Příspěvek od Pz »

Ahoj,
uz druhy den jsem zaseknuty na pitome chybe, tak se chci zeptat, jestli nekdo na neco takoveho uz taky narazil.

Pri parsovani zdrojaku (z prvniho testu)

function multiply(i, j:integer) : integer;
begin
multiply := i*j;
end;

mi zlobi vyhledani parametru i a j uvnitr kodu funkce. Maji se chovat jako lokalni promenne (cili pri vyhledani
ctx->tab->find_symbol($1)->access_typed()->type() je vracen SKIND_LOCAL_VARIABLE). To jeste jde (=funguje).

Kdyz ale chci ziskat offset adresy i nebo j, vzdy dostanu -1 (coz pro j je spravne, i ma ale vracet -2).
Source (osekany pro prehlednost):

symbol_pointer ptr = ctx->tab->find_symbol($1.id_ci_);
switch (ptr->kind())
{
case SKIND_LOCAL_VARIABLE:
$$.code->append_instruction(new ai::LSTI(ptr->access_local_variable()->address()));
break;
.. atd.

Problem je, ze ptr->access_local_variable()->address() vraci prave porad -1. Zkousel jsem i access_variable(), ale se stejnym
vysledkem. Nefunguje ani s vetsim mnozstvim parametru (vsechny dostanou -1). A co je nejhorsi, spolubydlovi, ktery PP delal
loni, to funguje dobre - a ani s jeho zdrojakem jsem nebyl schopny najit chybu (ma to prakticky stejne jako ja).

Predem dodavam - skutecne vyhledavam spravne promenne (I a J), to jsem overoval snad 100x.

Uz jsem psal i cvicicimu, zatim bez odpovedi.

Kdyby nekdo vedel co s tim, tak mu slozim kratsi symfonii.
Those who want, try to find the way. Those who do not want, try to find the reason.
lukas.hermann
Matfyz(ák|ačka) level I
Příspěvky: 8
Registrován: 13. 1. 2007 16:42

Re: 2008/09 - DU5

Příspěvek od lukas.hermann »

Ahoj,

tak to nás je víc, kdo má tento problém. Chyba je přímo v infrastrukutuře v dutables.cpp na řádcích 1540 a 1544. Visual Studio k tomu dokonce hlásí warningy. Už jsem napsal Yaghobovi a Bednárkovi, tak snad bude brzy update.

EDIT 20:00: Na stránkách přednášky se již objevilo opravené zadání.
Odpovědět

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