Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision |
teaching:cc4101:tareas:2015-2:tarea3 [2015/10/22 16:31] – [Índices De Bruijn] racruz | teaching:cc4101:tareas:2015-2:tarea3 [2016/03/25 18:42] (current) – old revision restored (2015/10/31 14:36) fmosso |
---|
{< x 10}} {+ 2 3}}))) | {< x 10}} {+ 2 3}}))) |
(list | (list |
(INT_CONST 2) | |
(INT_CONST 3) | (INT_CONST 3) |
| (INT_CONST 2) |
(ADD) | (ADD) |
(CLOSURE (list (ACCESS 0) (INT_CONST 10) (LESS) (RETURN)) (MTFun (MTNum) (MTBool)))) | (CLOSURE (list (INT_CONST 10) (ACCESS 0) (LESS) (RETURN)) (MTFun (MTNum) (MTBool))) |
(APPLY)) | (APPLY)) |
</code> | </code> |
En el ejemplo anterior se puede notar que los tipos que entiende la máquina no se crean con los constructores de ''%%Type%%''. Los tipos en la máquina esta definidos con el ''%%deftype MType%%'' por lo que debe hacerse una transformación de los tipos de ''%%Type%%'' a ''%%MType%%''. Las reglas para la transformación son: | En el ejemplo anterior se puede notar que los tipos que entiende la máquina no se crean con los constructores de ''%%Type%%''. Los tipos en la máquina esta definidos con el ''%%deftype MType%%'' por lo que debe hacerse una transformación de los tipos de ''%%Type%%'' a ''%%MType%%''. Las reglas para la transformación son: |
- Actualice la función ''%%çompile%%'' para que genere un ''%%CHECKCAST%%'' para un expresión ''%%cast%%''. <code scheme> | - Actualice la función ''%%çompile%%'' para que genere un ''%%CHECKCAST%%'' para un expresión ''%%cast%%''. <code scheme> |
> (compile (parse '{cast Num (and #t #f)})) | > (compile (parse '{cast Num (and #t #f)})) |
(list (BOOL_CONST #t) (BOOL_CONST #f) (AND) (CHECKCAST (MTNum))) | (list (BOOL_CONST #f) (BOOL_CONST #t) (AND) (CHECKCAST (MTNum))) |
</code> | </code> |
- Implemente la función ''%%(typed-compile s-expr)%%'' que se encarga de todo el proceso de generación de código desde una ''%%S-Expr%%'', considerando el parsing, la nueva validación de tipos, la transformación con índices De Bruijn y el paso a listas de instrucciones que considera incluir la instrucción ''%%(CHECKCAST type)%%'' para hacer validación dinámica de tipos. | - Implemente la función ''%%(typed-compile s-expr)%%'' que se encarga de todo el proceso de generación de código desde una ''%%S-Expr%%'', considerando el parsing, la nueva validación de tipos, la transformación con índices De Bruijn y el paso a listas de instrucciones que considera incluir la instrucción ''%%(CHECKCAST type)%%'' para hacer validación dinámica de tipos. |