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:36] – [Aspectos sintácticos] 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 61: Línea 62:
 ==== Aspectos sintácticos ==== ==== 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. Para describir la sintaxis se utiliza una gramática de contexto libre siguiendo la notación clásica de [[wpes>YACC]].+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úsculasLos identificadores en minúsculas son símbolos no terminales)). Este sería el cuerpo principal de esta gramática:
  
 <code> <code>
Línea 87: Línea 88:
 sentComp: '{' listaSent '}' 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> </code>
  
  
 ==== Aspectos semánticos ==== ==== 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.1623854198.txt.gz · Última modificación: 2021/06/16 14:36 por root

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki