Gramática
La siguiente descripción resume las construcciones más importantes del lenguaje. No es una especificación formal completa, pero sirve como referencia rápida.
Programas
Sección titulada «Programas»Un archivo .qz contiene una secuencia de declaraciones separadas por saltos de línea:
programa -> declaracion*declaracion -> declaracion_variable | declaracion_funcion | declaracion_prototipo | declaracion_objeto | declaracion_importacion | declaracion_exportacion | sentenciaDeclaraciones
Sección titulada «Declaraciones»declaracion_variable -> tipo identificador ('var')? ('=' expresion)?tipo -> 'vacio' | 'entero' | 'número' | 'texto' | 'log' | 'lista' '<' tipo '>' | 'lista' | 'jsn'
declaracion_funcion -> tipo identificador '(' parametros? ')' bloqueparametros -> parametro (',' parametro)*parametro -> tipo ('var')? identificador
declaracion_prototipo -> 'prototipo' identificador '{' miembros_prototipo '}'miembros_prototipo -> (bloque_publico_prototipo | bloque_privado_prototipo | miembro_prototipo_publico)*bloque_publico_prototipo -> 'publico:' miembro_prototipo_publico*bloque_privado_prototipo -> 'privado:' miembro_prototipo_privado*miembro_prototipo_publico -> firma_atributo | firma_funcionmiembro_prototipo_privado -> firma_atributo | firma_funcionfirma_atributo -> tipo ('opcional')? ('var')? identificadorfirma_funcion -> tipo ('opcional')? identificador '(' parametros? ')'
declaracion_objeto -> 'objeto' identificador herencia? implementacion? '{' miembros_objeto '}'herencia -> 'como' identificador (',' identificador)*implementacion -> 'implementa' identificador (',' identificador)*miembros_objeto -> (bloque_publico | bloque_privado | miembro_publico)*bloque_publico -> 'publico:' miembro_publico*bloque_privado -> 'privado:' miembro_privado*miembro_publico -> declaracion_variable | declaracion_funcion | constructor | miembro_libremiembro_privado -> igual que miembro_publico pero accesible solo dentro del objetoconstructor -> identificador '(' parametros? ')' bloque (sin `retornar`)miembro_libre -> 'libre' declaracion_variable | 'libre' declaracion_funcionCuando un objeto combina herencia e implementación de prototipos, la forma es: objeto Nombre como Padre implementa Prototipo1, Prototipo2.
Sentencias
Sección titulada «Sentencias»sentencia -> bloque | sentencia_expr | sentencia_si | sentencia_mientras | sentencia_para | sentencia_hacer | sentencia_intentar | sentencia_romper | sentencia_continuar | sentencia_retornar | sentencia_lanzar
bloque -> '{' declaracion* '}'Condicionales y bucles
Sección titulada «Condicionales y bucles»sentencia_si -> 'si' '(' expresion ')' bloque ('sino' bloque)? ('sino' 'si' '(' expresion ')' bloque)*sentencia_mientras -> 'mientras' '(' expresion ')' bloquesentencia_hacer -> 'hacer' bloque 'mientras' '(' expresion ')'
sentencia_para -> 'para' '(' inicio_para condicion_para actualizacion_para ')' bloqueinicio_para -> declaracion_variable | sentencia_expr | εcondicion_para -> expresion | εactualizacion_para -> expresion | ε
// Iteración sobre coleccionessentencia_para -> 'para' '(' tipo 'var' identificador ('en' | 'cada') expresion ')' bloqueManejo de errores
Sección titulada «Manejo de errores»sentencia_intentar -> 'intentar' bloque bloque_capturar+ bloque_finalmente?bloque_capturar -> 'capturar' '(' 'excepcion' identificador ')' bloquebloque_finalmente -> 'finalmente' bloque
sentencia_lanzar -> 'lanzar' expresionsentencia_retornar -> 'retornar' expresion?Expresiones
Sección titulada «Expresiones»expresion -> expresion_asignacionexpresion_asignacion-> expresion_logica (operador_asignacion expresion_asignacion)?operador_asignacion -> '=' | '+=' | '-=' | '*=' | '/=' | '%='
expresion_logica -> expresion_igualdad (('y' | 'o' | '&&' | '||') expresion_igualdad)*expresion_igualdad -> expresion_comparacion (('==' | '!=') expresion_comparacion)*expresion_comparacion -> expresion_term (( '>' | '>=' | '<' | '<=' ) expresion_term)*expresion_term -> expresion_factor (( '+' | '-' ) expresion_factor)*expresion_factor -> expresion_unaria (( '*' | '/' | '%' ) expresion_unaria)*expresion_unaria -> ( '!' | 'no' | '-' | '++' | '--' ) expresion_unaria | expresion_postfijaexpresion_postfija -> expresion_primaria (postfijo)*postfijo -> llamada | acceso_lista | acceso_propiedad | incremento | decrementollamada -> '(' argumentos? ')'argumentos -> expresion (',' expresion)*acceso_lista -> '[' expresion ']'acceso_propiedad -> '.' identificadorincremento -> '++'decremento -> '--'
expresion_primaria -> literal | identificador | '(' expresion ')' | 'nuevo' identificador '(' argumentos? ')' | interpolacion_textoLos literales incluyen números, texto entre comillas dobles, listas [ ... ], objetos JSON { ... }, valores verdadero, falso y nulo.
Esta gramática resumida refleja el estado del lenguaje en v0.0.12. A medida que se agreguen características (como funciones asincrónicas o más módulos nativos) se actualizará este apartado.