Skip to main content
Version: 2021_2

Práctica 6 (3/11): intérpretes


Explicación lab 3

Repo de hoy: https://github.com/compiladores/esqueleto-jsonlang#

Brevísimo resumen de semánticas formales#


Triplas de Hoare#

{P}C{Q}\{P\}C\{Q\}

Al ejecutar CC, si el estado del programa es PP, pasa a ser QQ

Ejemplo#

Asignación en C

{S} int x = 4; {Sx=4}\{S\} \texttt{ int x = 4; } \{S \land x=4\}
{S} int x = N; {Sx=N}\{S\} \texttt{ int x = $N$; } \{S \land x=N\}

Secuencia:

{A}S1{B},{B}S2{C}{A}S1;S2{C}\{A\} \texttt{$S_1$} \{B\}, \{B\} \texttt{$S_2$} \{C\} \Rightarrow \{A\} \texttt{$S_1$;$S_2$} \{C\}

Semántica Denotacional#

Cada construcción sintáctica del programa se convierte en una representación matemática rigurosa de lo que hace.

Ejemplo#

En C, todo el código que puede ejecutarse es un statement, así, podemos tener:

  • if statement
  • while statement
  • block statement
  • assign statement
  • expression statement

Una función semántica va a ser será una F:Statement(RAM×diskRAM×disk)F: Statement \to (RAM \times disk \to RAM \times disk)


Jsonlang: un lenguaje de POJOs#

  • JJ: valores javascript válidos
  • exprJexpr\subset J: expresiones del lenguaje
  • C:stringJC:string\to J: diccionario contexto
  • S:NJS:\N\to J: lista
  • SiSS_i\subset S inputs, SoSS_o\subset S outputs

Sea la función semántica:

F:expr×D×Si×SoJ×D×Si×SoF:expr \times D \times S_i \times S_o\to J \times D \times S_i \times S_o

Esta función semántica vamos a llamarla eval. Ejemplos en el código.


Ejercício#

Agregarle algo de lo siguiente a Jsonlang. La función semántica debe mantenerse funcional:

  • un if
  • un while
  • un for
  • scopes
  • funciones