View Single Post
Old 27-03-2006, 19:08   #1
ErBestia
Junior Member
 
Iscritto dal: Mar 2004
Messaggi: 12
Aiuto x Linguaggi e Ambienti di Programmazione

Salve a tutti!

Sto affrontando un corso di Linguaggi e Ambienti di programmazione, e trovo alcune difficoltà nella traduzione di codici in quadruple (o "codice a 3 indirizzi").

Ad esempio, davanti ad un esercizio del genere:

Scrivere il codice a quadruple (usando controllo di flusso per i booleani e metodo delle etichette per la generazione del codice) per il seguente frammento:

while (a > b) do
while (c < d) do begin
a := a/b;
c := c+1;
end

la soluzione potrebbe essere:

L1: if a > b goto L2
goto LNext
L2: if c < d goto L3
goto L1
L3: t1 := a/b
a := t1
t2 := c+1
c := t2
goto L2
LNext: ...

o bisogna aggiungere qualcos'altro per completare l'esercizio stesso?

Inoltre, volendo scrivere delle produzioni di un frammento di
grammatica che possa aver generato il codice precedente (produzioni + regole semantiche), mi chidedevo se si dovesse continuare così:

S --> while E do S1 { "codice while metodo etichette" }

S1 --> begin A end { S1.code := A.code}

S1 --> S { S1.code := S.code }

A --> id := B; A { NON SAPREI, MI POTETE AIUTARE? }

A --> id := B; { A.code := B.code ||
gen(id.place = B.place)}

B --> id1/id2 { B.place := newtemp;
B.code :=
gen(B.place := id1.place/id2.place)}

B --> id+1 { B.place := newtemp;
B.code :=
gen(B.place := id.place+1)}

E --> id1 relop id2 { E.code := gen(if id1.place relop.op
id2.place goto E.true) ||
gen(goto E.false) }

Ringrazio qualunque pio uomo x l'aiuto , anche se capisco che la cosa può sembrare di non tanta rilevanza!

Ciauz
ErBestia è offline   Rispondi citando il messaggio o parte di esso