La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Proyecto 1 Agregar los siguientes operadores a Tiny, con la precedencia y asociatividad indicada OperadorTipoPrecAsociatividad ** binario altaderecha -,

Presentaciones similares


Presentación del tema: "Proyecto 1 Agregar los siguientes operadores a Tiny, con la precedencia y asociatividad indicada OperadorTipoPrecAsociatividad ** binario altaderecha -,"— Transcripción de la presentación:

1 Proyecto 1 Agregar los siguientes operadores a Tiny, con la precedencia y asociatividad indicada OperadorTipoPrecAsociatividad ** binario altaderecha -, +, not unario derecha *, /, and, mod binario izquierda +, -, or binario izquierda, >=, binario bajaninguna

2 Proyecto 1 Agregar las siguientes constantes a Tiny: –true, false Agregar la siguiente función intrínseca a Tiny: –eof Hacer que la cláusula else sea opcional. Permitir expresiones múltiples en la instrucción output.

3 Proyecto 2 Agregar la instrucción de intercambio: x:=:y Agregar la instrucción “repeat” a Tiny. Constrainer: E debe ser booleano; processar S 1, … S n Generador de Código: Hacer cascada con CurrLabel, S 1, … S n repeat S1ESn... L2(CL?) S1 S2 … Sn E COND L1 L2 L1

4 Proyecto 2 Instrucción loop-pool con exit loop n=read; if (n=0)then exit else output(n); pool; Constrainer: En nodo ’program’: DTEnter(LOOP_CTXT,T,T) En nodo ‘loop’: -- Open_Scope; -- DTEnter(LOOP_CTXT,T,T); // LOOP_CTXT es ‘ ’ -- Procesar hijos; -- Close_scope; -- if (Decoration(T)=0) print (‘Warning: no ‘exit’) En nodo ‘exit’: -- Temp = Lookup(LOOP_CTXT); -- if NodeName(Temp) <> LoopNode then Error -- Decorate(T,Temp); Decorate(Temp,T); loop S1Sn... exit

5 Proyecto 2 Instrucción loop-pool con exit loop n=read; if (n=0)then exit else output(n); pool; Generador de Código: En nodo ’loop’: -- Decorate (T, L1=Makelabel); -- Generar código (ver diagrama); En nodo ‘exit’: -- L1=Decoration(Decoration(T)); -- CodeGen1(GOTOOP, L1, Currlabel) L2(CL?) S1 S2 … Sn GOTO L2 L1 GOTO L1 loop S1S1 SnSn... exit L1

6 Proyecto 2: Instrucción ‘for’ de Pascal (upto y downto) upto i IFS for i := I to F do S Constrainer: En node ‘program’ : DTEnter(FOR_CTXT, T); En nodo ‘upto’: Temp = Lookup(FOR_CTXT); Decorate (T,Temp); Open_scope; DTEnter(FOR_CTXT,T); DTEnter(LOOP_CTXT); // disallows “exit” Procesar hijos // assumir que tiene el tipo correcto. while NodeName(Temp) != ProgramNode // i debe ser distinto if (NN(FK(FK(Temp)) = NN(FK(FK(T)) then Error // de todas las vcl’s de Temp = Decoration(Temp) // loops anidados Close_scope; Siguiente ‘for’ anidado No se permite exit

7 Instrucción ‘for’ de Pascal (cont’d) upto i IFS for i := I to F do S Constrainer: En nodo ‘assign’ : Temp = Lookup(FOR_CTXT); while NodeName(Temp) != ProgramNode if (NN(FK(FK(Temp)) = NN(FK(FK(T)) then Error // x (izquierda de assign) Temp = Decoration(Temp) // no puede ser igual a la // vcl de ningun ‘loop’ // anidado Siguiente ‘for’ anidado Prohibir assignación a i !

8 Instrucción ‘for’ de Pascal (cont’d) upto i IFS for i := I to F do S CL F I ST i L1 DUP LD i BOP BGE COND L2 L3 L2 S LD i UNOP USUCC ST i GOTO L1 L3 POP 1 LIT 0 ST i CodeGenerator: Generar código (duh, ver diagrama) Recuerde: ProcessNode siempre devuelve una etiqueta return Nolabel

9 Proyecto 2: Instrucción ‘case’ case v of 1..3: S1; 2: S2; otherwise S3 end; case E case_clauseotherwisecase_clause... CL1S1CLnSnS opcional dos posibilidades: n.. lu o bien Constrainer: Assumir E está correcto, comparar con los demás

10 Instrucción ‘case’ case E case_clauseotherwisecase_clause... CL1S1CLnSnS opcional CL E CL1 COND L1 L2 L1 POP 1 S1 GOTO LE L2 CL2 COND L3 L4 L3 POP 1 S2 GOTO LE Ln CLn COND L 2n-1 L 2n L 2n-1 POP 1 Sn GOTO LE... L DUP DUP LIT l BOP BGE SWAP LIT u BOP BLE BOP BAND L DUP LIT n BOP BEQ Cada CLi es uno de estos dos sin ‘otherwise’ L 2n POP 1 S LE L 2n POP 1 LE con ‘otherwise’ OR


Descargar ppt "Proyecto 1 Agregar los siguientes operadores a Tiny, con la precedencia y asociatividad indicada OperadorTipoPrecAsociatividad ** binario altaderecha -,"

Presentaciones similares


Anuncios Google