Herramientas de usuario

Herramientas del sitio


es:manual:ssl

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
es:manual:ssl [2021/06/16 14:27] rootes:manual:ssl [2021/07/07 17:46] (actual) – [Aspectos semánticos] root
Línea 34: Línea 34:
     round       round  
  
-a las que hay que añadir los identificadores predefinidos.+a las que hay que añadir los identificadores predefinidos. Actualmente no todas las sentencias correspondientes a algunas de estas palabras reservadas están implementadas, algunas están simplemente reservadas para futuros usos.
  
 === Identificadores === === Identificadores ===
Línea 40: Línea 40:
  
     * ''answer''. contiene el texto de la respuesta del alumno. En caso de que la respuesta del alumno sea múltiple la variable ''answer'' contiene una matriz que puede accederse como ''answer[0]'', ''answer[1]'', etc. En ese caso la variable ''answer'' sigue conservando la matriz completa.     * ''answer''. contiene el texto de la respuesta del alumno. En caso de que la respuesta del alumno sea múltiple la variable ''answer'' contiene una matriz que puede accederse como ''answer[0]'', ''answer[1]'', etc. En ese caso la variable ''answer'' sigue conservando la matriz completa.
 +    * ''respuesta'', contiene exactamente lo mismo que la anterior, para poder escribir el código en español.
  
 === Operadores === === Operadores ===
Línea 58: Línea 59:
 |= += -= *= /= %= |Asignación, binario |Derecha | |= += -= *= /= %= |Asignación, binario |Derecha |
  
 +
 +==== Aspectos sintácticos ====
 +
 +Desde un punto de vita sintactico un programa es una lista de sentencias, que a su vez pueden ser simples o compuestas. El lenguaje no tiene tipos y no requiere de sentencias de declaración. Tampoco tiene funciones, salvo algunas predefinidas. Para describir la sintaxis se utiliza una gramática de contexto libre siguiendo la notación clásica de [[wpes>YACC]] ((Las secuencias entre comillas representan símbolos terminales del lenguaje, asi como los identificadores en mayúsculas. Los identificadores en minúsculas son símbolos no terminales)). Este sería el cuerpo principal de esta gramática:
 +
 +<code>
 +axioma: listaSent
 +      ;
 +         
 +listaSent: listaSent sent 
 +         |  
 +         ;
 +
 +sent: sentComp
 +    | asig optPYC 
 +    | sentReturn optPYC
 +    | sentIf  
 +    | sentWhile 
 +    | sentDo optPYC
 +    | sentFor
 +    | sentPrint 
 +    ;
 +
 +optPYC: ';'
 +       |
 +       ;
 +       
 +sentComp: '{' listaSent '}'
 + ;
 +</code>
 +
 +=== Expresiones ===
 +Son prácticamente las mismas que en Javascript, añadiendole el [[wp>Elvis_operator|operador elvis]]. Las variables pueden ser variables simples o matrices de una sola dimensión, en cuyo caso pueden estar indexadas por una expresión.
 +
 +<code>
 +exp: exp '+' exp
 +   | exp '-' exp
 +   | exp '*' exp
 +   | exp '/' exp
 +   | exp '%' exp
 +   | '-' exp
 +   | cond '?' exp ':' exp
 +   | exp '?:' exp
 +   | '(int)' exp
 +   | 'round' '(' exp ')'
 +   | '(' exp ')'
 +   | var
 +   | asig
 +   | CONSTANTE_ENTERA
 +   | CONSTANTE_REAL
 +   | CONSTANTE_STRING
 +   ;
 +
 +var: IDENTIFICADOR
 +   ;
 +</code>
 +
 +=== Condiciones ===
 +Son expresiones lógicas que tienen como resultado un valor booleano.
 +
 +<code>
 +cond: exp '==' exp
 +    | exp '!=' exp
 +    | exp '<' exp
 +    | exp '<=' exp
 +    | exp '>=' exp
 +    | exp '>' exp
 +    | cond '||' cond
 +    | cond '&&' cond
 +    | '!' cond  
 +    | '(' cond ')'   
 +    | 'true'
 +    | 'false'
 +    ;  
 +</code>
 +
 +=== Sentencias de asignación ===
 +Lo mas destacable de las sentencias de asignación de SSL es que puede asignarse a una variable el valor booleano de una condición
 +
 +<code>
 +asig: var '=' exp
 +    | var '=' cond
 +    | var '+=' exp
 +    | var '-=' exp
 +    | var '*=' exp
 +    | var '/=' exp
 +    | '++' var
 +    | '--' var
 +    | var '++'
 +    | var '--'
 +    ;
 +</code>
 +
 +=== Sentencia if ===
 +
 +<code>
 +sentIf: 'if' '(' cond ')' sent
 +      | 'if' '(' cond ')' sent 'else' sent
 +      ;
 +</code>
 +
 +
 +=== Sentencia while ===
 +
 +<code>
 +sentWhile: 'while' '(' cond ')' sent
 +         ;
 +</code>
 +
 +
 +=== Sentencia do-while ===
 +
 +<code>
 +sentDo: 'do' sent 'while' '(' cond ')'
 +      ;
 +</code>
 +
 +
 +=== Sentencia for ===
 +<code>
 +sentFor: 'for' '(' exp ',' cond ',' exp ')' sent
 +       ;
 +</code>
 +
 +=== Sentencia return ===
 +La sentencia return puede devolver un valor numérico, una cadena de caracteres o bien el valor booleano correspondiente a una expresión.
 +
 +<code>
 +sentFor: 'return' exp 
 +       | 'return' cond
 +       ;
 +</code>
 +
 +
 +=== Sentencia print ===
 +<code>
 +sentPrint: 'print' '(' exp ')' 
 +         ;
 +</code>
 +
 +=== Arrays ===
 +Pueden definirse arrays unidimensionales son la siguiente sintaxis:
 +
 +<code>
 +asig: var '=' '{' listaExp '}'
 +    ;
 +listaExp: listaExp ',' exp
 +        | exp
 +        ;
 +</code>
 +
 +y acceder a sus elementos mediante:
 +
 +<code>
 +var: IDENTIFICADOR '[' exp ']'
 +   ;
 +</code>
 +
 +
 +==== Aspectos semánticos ====
 +
 +El lenguaje no tiene tipos. Cuando se realiza una operación SSL intenta acomodar la semántica de la operación a un posible tipo que infiere de sus operadores. Así por ejemplo, la operación ''x=2+2'', tendrá como resultado ''x=4'' pero la operación ''x='a'+'b''' tendrá como resultado ''x='ab'''.
 +
 +Las operaciones entre números se hacen siempre considerando que los operadores son números reales.
  
  
es/manual/ssl.1623853670.txt.gz · Última modificación: 2021/06/16 14:27 por root

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki