Hola de nuevo, siguiendo con mi contribucion a temas para segundo parcial del curso compiladores 2, aqui les coloco una nueva traduccion dirigida, esta ves para la sentencia SWITCH - CASE.
Nota: '<'cuerpo'>' cualquier sentencia valida
SW := SWITCH '(' EXP ')' {: LC.cad = EXP.cad; write('goto Comparacion'); :} LC {: write('Comparacion:');
write(LC.text);
write('goto Salida');
write('Salida:') :}
LC := {: LC.cad = LC.cad; :} LC CASE EXP ':' {:write('L', contEtiq, ':'); LC.eti = concat('T', contEtiq); contEtiq++; :} '<'cuerpo'>' {: LC.text = concat(LC.text, 'if', LC.cad, '==', EXP.cad, 'then goto ', LC.eti); :}
| {: LC.cad = LC.cad; :} LC CASE EXP ':' {:write('L', contEtiq, ':'); LC.eti = concat('T', contEtiq); contEtiq++; :} '<'cuerpo'>' 'break' {: write('goto Salida');
LC.text = concat(LC.text, 'if', LC.cad, '==', EXP.cad, 'then goto ', LC.eti); :}
| CASE EXP ':' {:write('L', contEtiq, ':'); LC.eti = concat('T', contEtiq); contEtiq++; :} '<'cuerpo'>' {: LC.text = concat('if', LC.cad, '==', EXP.cad, 'then goto ', LC.eti); :}
| CASE EXP ':' {:write('L', contEtiq, ':'); LC.eti = concat('T', contEtiq); contEtiq++; :} '<'cuerpo'>' 'break' {: write('goto SALIDA');
LC.text = concat('if', LC.cad, '==', EXP.cad, 'then goto ', LC.eti); :}
Codigo de Tres Direcciones SWITCH
Etiquetas:
COMPILADORES
Publicado por
Elder Alexander Prado Herrera
miércoles, 9 de septiembre de 2009
Suscribirse a:
Enviar comentarios (Atom)
3 comentarios:
Alex!! para aux de compi :P
Esta bien vos! gracias me sirvio bastante! pero por tu culpa me faltaron 5 puntos...
sigo sin entender y lo del parcial de mañana q!! jajaja
Publicar un comentario