文法
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_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_objeto -> 'objeto' identificador '{' miembros_objeto '}'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_funcionSentencias
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.